如何对二维数组进行排序并跟踪 Java 中的原始索引
How can I sort a 2D array and keep track of the original indexes in Java
我有一个名为 distance[][]
的二维数组
第 0 列包含我的值:
示例:
{ 5
7
3
9 }
它看起来像是一维数组,但我已将其转换为二维数组以便能够跟踪我的索引。
我访问第一个值的方式是距离[0][0]。
我的问题是:如果我要对数组进行排序,我如何才能跟踪原始索引位置。我的印象是我可能需要按升序创建一个相应的数字列表,该列表与距离值的位置相对应。
之后我会做什么?
最简单的解决方案是创建一个 Pair
class 来保存该项目及其对应的 index.Then,保留此 Pair
[=20= 的列表]es int 两个不同的 list
s 而不是对 java 中的 them.Since 之一进行排序,您可以使用引用而不创建复制对象,这应该是 easy.Now 排序列表将包含根据值排序的值及其对应的索引,未排序的列表将具有 Pair
sin 您输入它们的顺序,即根据索引排序。
您只需要使用比较器即可。考虑以下代码 -
Arrays.sort(arr, new java.util.Comparator<int[]>(){
public int compare(int[] a,int[] b){
return a[0]-b[0];
}
});
arr
是您的原始二维数组,其中第一列包含要排序的数字,第二列包含索引
我有一个名为 distance[][]
的二维数组第 0 列包含我的值:
示例:
{ 5
7
3
9 }
它看起来像是一维数组,但我已将其转换为二维数组以便能够跟踪我的索引。
我访问第一个值的方式是距离[0][0]。
我的问题是:如果我要对数组进行排序,我如何才能跟踪原始索引位置。我的印象是我可能需要按升序创建一个相应的数字列表,该列表与距离值的位置相对应。
之后我会做什么?
最简单的解决方案是创建一个 Pair
class 来保存该项目及其对应的 index.Then,保留此 Pair
[=20= 的列表]es int 两个不同的 list
s 而不是对 java 中的 them.Since 之一进行排序,您可以使用引用而不创建复制对象,这应该是 easy.Now 排序列表将包含根据值排序的值及其对应的索引,未排序的列表将具有 Pair
sin 您输入它们的顺序,即根据索引排序。
您只需要使用比较器即可。考虑以下代码 -
Arrays.sort(arr, new java.util.Comparator<int[]>(){
public int compare(int[] a,int[] b){
return a[0]-b[0];
}
});
arr
是您的原始二维数组,其中第一列包含要排序的数字,第二列包含索引