Java 如何打印排序的二维数组的原始索引?



假设我有一个 5X1 二维数组 [2,3,1,4,5],所以索引将是 [[0,0],[1,0],[2,0],[3,0],[4,0]]仍然,但是如何让原始索引保持在该值中?因此,我可以在对值进行排序后打印出索引(如果有意义(,示例

排序后,值将是 [1,2,3,4,5],但索引将是 [2,0][0,0][1,0][3,0][4,0] 你到底如何操作它? 提前感谢,帮助将不胜感激!

{
int[][] array = new int[5][1];
array = {{2,3,1,4,5}};
//at this point the array index will be [[0,0],[1,0],[2,0],[3,0],[4,0]]
Arrays.sort(array);
//i want the index to stay within the value after sorting...
} 

奇怪的问题。我将完全重构代码以使用我自己的自定义对象,该对象不仅保存值,还保存原始位置。

另一种方法是编写自己的排序,但是在排序时,保留具有原始位置的第二个数组,并且您对第一个数组执行的所有操作都会在第二个数组上镜像。

第三种方法:如果数组的值保证是唯一的,则可以首先复制数组。调用一个 origArray 和一个 sortedArray。然后,当查看sortedArray中的项目时,在origArray中找到它,这将告诉您它曾经的位置。但这取决于值是唯一的,这是一个糟糕的假设。

您可能需要重新编辑您的问题。 您的语法对于数组分配不正确。

它应该如下。

v = new int[][]{{2},{3},{1},{4},{5}};

一旦你改变了它,你就不能那样使用排序。

为了解决您的问题,我将创建一个映射,将索引映射到其原始值。 我还更改了阵列分配,如前所述。

int[][] vals;
vals = new int[][] { { 12, 31, 21, 75, 15
}
};
Map<Integer, Integer> indices =
IntStream.range(0, vals[0].length).boxed().collect(
Collectors.toMap(i -> i, i -> vals[0][i]));
indices.forEach((k, v) -> System.out.println(k + " => " + v));
Arrays.sort(vals[0]);
System.out.println(Arrays.toString(vals[0]));

这打印

0 => 12
1 => 31
2 => 21
3 => 75
4 => 15
[12, 15, 21, 31, 75]

如果要将值映射到原始索引,只需将参数反转为Collector

Collectors.toMap(i -> vals[0][i], i->i)

最新更新