Java如何打印排序的2d数组的原始索引?

Java如何打印排序的2d数组的原始索引?,java,Java,假设我有一个5X1 2D数组[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}};

假设我有一个5X1 2D数组[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...

} 

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

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


第三种方法:如果保证数组的值是唯一的,则可以首先复制数组。叫一个Origaray和一个SorterDarray。然后,当在SorterDarray中查看一个项目时,在Origaray中找到它,这将告诉您它以前在哪里。但这取决于值是否唯一,这是一个糟糕的假设。

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

应该是这样的

v=newint[][{{2}、{3}、{1}、{4}、{5};
一旦你改变了它,你就不能用排序了

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

int[]vals;
VAL=newint[][{{12,31,21,75,15
}
};
地图索引=
IntStream.range(0,VAL[0].length).boxed().collect(
Collectors.toMap(i->i,i->vals[0][i]);
索引.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)

使用
映射可以更好地管理此类需求。以下是一个示例程序:

import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {

        // LinkedHashMap to preserve the insertion order
        Map<List, Integer> map = new LinkedHashMap<List, Integer>();

        map.put(Arrays.asList(0, 0), 2);
        map.put(Arrays.asList(1, 0), 3);
        map.put(Arrays.asList(2, 0), 1);
        map.put(Arrays.asList(3, 0), 4);
        map.put(Arrays.asList(4, 0), 5);

        System.out.println("Map before sorting: " + map);

        // Sort map by values
        Map<List, Integer> sorted = map.entrySet().stream()
                .sorted(Map.Entry.comparingByValue())
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2, LinkedHashMap::new));

        System.out.println("Map after sorting: " + sorted);
    }
}

您仍然需要编辑您的帖子并更正语法。您的数组声明不正确,并且是
数组。sort
采用单个
维度数组
。我确实尝试了我能想到的最好的排序,在循环时采用数组中的最小值,然后在每次完成双循环时增加值,但这对于运行时来说是一个很大的错误。。。也许我会尝试做另一个不同的自定义排序,谢谢!谢谢实际上,我忘了在问题中提到,因为运行时lol,我将避免使用map
Map before sorting: {[0, 0]=2, [1, 0]=3, [2, 0]=1, [3, 0]=4, [4, 0]=5}
Map after sorting: {[2, 0]=1, [0, 0]=2, [1, 0]=3, [3, 0]=4, [4, 0]=5}