簡體   English   中英

Java 如何打印已排序的二維數組的原始索引?

[英]Java How to print the original index of a sorted 2d array?

假設我有一個 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}};

一旦你改變了它,你就不能那樣使用 sort 了。

為了解決您的問題,我將創建一個映射,將索引映射到其原始值。 如前所述,我還更改了數組分配。

      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)

假設我有一個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...

} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM