当前位置: 首页 > 知识库问答 >
问题:

Java:使用indexOf方法基于另一个数组对一个数组进行排序

南门嘉
2023-03-14

我想根据另一个数组(索引)的排序顺序迭代两个数组(A,B),在本例中是10、34、32、21。

String[] A: a, b, c, d
String[] B: e, f, g, h
int[] indexes: 10, 34, 32, 21

为这里的坏例子道歉。我已经更新了索引数组以消除混乱。

预期投入产出

List<Integer> indexOrder = new ArrayList<>(indexes.length);

for (int i = 0; i < indexes.length; i++) {
    indexOrder.add(i);
}

Collections.sort(indexOrder, Comparator.comparing((Integer s) -> indexes[s]));

但是,如果我将最后一行末尾的indexes[s]更改为indexes[indexOrder.indexOf(s)]。排序将给出错误的结果。如果ArrayList的索引与其值相同,为什么indexOf(s)会给出与s不同的结果。

Collections.sort(indexOrder, Comparator.comparing((Integer s) -> indexes[indexOrder.indexOf(s)]));

共有1个答案

闻人栋
2023-03-14

似乎您希望indexOrder.indexof(s)始终等于s(因为列表已初始化为[0,1,2,3],其中s索引s)。

虽然在原始的IndexOrder列表中是这样,但当Collections.sort开始交换列表的元素时,可能不再是这样。

为了在对IndexOrder进行排序时不依赖其顺序,可以创建该列表的副本:

List<Integer> copy = new ArrayList<>(indexOrder);
Collections.sort(indexOrder, Comparator.comparing((Integer s) -> indexes[copy.indexOf(s)]));
 类似资料:
  • 问题内容: 在PHP中可以做这样的事情吗?您将如何编写函数?这是一个例子。顺序是最重要的。 我想做类似的事情 因为最后我使用了foreach()并且它们的顺序不正确(因为我将值附加到需要正确顺序的字符串中,而且我事先也不知道所有的数组键/值)。 我看过PHP的内部数组函数,但似乎只能按字母或数字排序。 问题答案: 只需使用或即可。通过以给定的数组(按正确的顺序)开始并用实际数组中的数据覆盖/添加键

  • 有没有更时髦的方法来解决这个问题?

  • 问题内容: 从这个问题的答案(使用一个较少的内存,沿着一个特定轴对另一个numpy数组进行排序)中,我学习了如何根据另一个numpy数组的值对多维numpy数组进行排序,而又不创建太多额外的数组。 但是,仅当数组和具有相同形状时才有效。我的数组是一维数组,但数组是ND数组(未指定N)。通过一维数组的值在特定轴上对数组进行排序是一种好方法(高效)吗? 问题答案: 使用与关键字参数: 如果要使用花式索

  • 因此,我试图学习如何为类项目排序数组。我想知道如何对一个数组进行排序,从而对另一个数组进行排序。在下面的代码中,我可以对年份数组进行排序,但我如何才能使更改这一数组将名称和艺术家数组都更改为它们排列的数组呢?此外,如果你有任何建议,让代码对眼睛不那么苛刻,请告诉我,我正在努力掌握这个概念。

  • 问题内容: 是否可以对看起来像这样的数组进行排序和重新排列: 匹配此数组的安排: 不幸的是,我没有任何要跟踪的ID。我将需要优先处理items-array,以使其尽可能接近sortingArr。 更新: 这是我正在寻找的输出: 任何想法如何做到这一点? 问题答案: 就像是: 这是一个较短的代码,但是会破坏数组:

  • 我有这两个数组,我需要按ID订购第二个数组,就像第一个数组一样 如何根据第一个值重新订购第二个?我尝试了这个想法,但只适用于简单数组:https://develike.com/en/articles/sorting-an-array-by-values-based-on-another-array-in-php 有序ID数组: 无序数组: