2012-02-08 53 views
1

什麼是Java中簡單的方法來排序元素數組,維護元素存儲在原始數組中的索引信息?是否有內置功能?索引映射從排序到原始數組

我能想到的方法很少,但都不是微不足道的。

  1. 自己實現排序函數,並將索引數組與返回的數組一起返回到原始數組。
  2. 將元素包裝到一個類中,並將原始數組的索引存儲在此類中,避免了排序功能。

我需要它的原因是重新排列矩陣中的行,當重排順序由向量中的值指定時。矢量中的值應該按遞增順序排列,矩陣中的行應相應地重新排列。

回答

1

恕我直言,你會過得更好創建自己的設計,也許創建一個名爲MyDataSorter用的方法排序(yourArray)返回您的自定義類,也可以採取仿製藥的排序列表類...像

List<OriginalOrderKeeper<MyDataType>> sort (MyDataType [] array)

+0

我正在尋找一個非常類似的選項。像IndexedDouble類有2個字段:原始數組中的double和index。不幸的是,泛型的一個問題是我必須爲每個簡單類型數組指定一個具體類型,這會爆炸一些聲明。 – Leonid 2012-02-08 11:15:52

1

爲什麼不在排序並將索引存儲在Map<Object, Integer>之前在原始數組上迭代一次?

+0

該對象是一個*雙*,雙精度數組需要排序,所以你會得到一些裝箱,除非像* trove *這樣的其他庫被用來爲簡單類型提供地圖。但你仍然最終創建和維護一張地圖。 – Leonid 2012-02-08 10:39:32

+0

@Leonid爲什麼不只是複製原來的double []來保持它? – quaylar 2012-02-08 10:43:14

0

假設您可以直接對矩陣中的行進行重新排序,您不需要索引。

您可以嘗試使用Arrays.sort(Object[] a, Comparator c)使用一種特殊的比較對它們進行排序:

public class RowComparator implements Comparator<double[]> { 

    public final int columnIndex; 

    @Override 
    public int compare(double[] row1, double[] row2) { 
     return Double.compare(row1[columnIndex], row2[columnIndex]); 
    } 

    public RowComparator(int columnIndex) { 
     super(); 
     this.columnIndex = columnIndex; 
    } 

    } 

您提供相關的比較,列索引初始化比較。

編輯:行和列混淆了一下。我假設一個double [rows] [columns]數組。