2017-06-08 33 views
0

私は2次元配列と2次元インデックスを渡す関数を持つsql sortと似たjavaの機能を実現する必要があります。この関数は、指定された列のソート2d配列を返す必要がありますインデックス。2次元配列のディープソート

要するに、2列の2列をソートする必要があります。

私は1桁の賢明な並べ替えを達成することができた、PFBの同じコード。

Arrays.sort(arr, new Comparator(){ 
     private int col ; 
     public int compare(Object o1, Object o2) { 
    String[] s1 = (String[])o1; 
    String[] s2 = (String[])o2; 
    return s1[col].compareTo(s2[col]); 
    } 

    private Comparator init(int var){ 
    col = var; 
    return this; 
} 
}.init(0) 
); 

しかし、2d配列の2列に基づいてソートするには、この機能を強化する必要があります。 私は専門家にこれを手伝うように依頼します。

例 入力配列事前に

 
1 2 3 4 
1 8 2 8 
8 6 10 11 
5 6 7 8 
1 6 2 6

Output : On sorting with Column 2,3 1 2 3 4 1 6 2 6 5 6 7 8 8 6 10 11 1 8 2 8

おかげで、 ラジュ最初のものは、そのように、対等のときだけ第二のカラムで比較

+1

あなたは2-3のentiresがあなたの2次元配列で言うとどのようにソートの終わりは次のようになりますとのデータ構造例を追加できますか? – pandaadb

+0

入力@pandaadb –

+0

コンパイラをカスケードすることができます。 'Arrays.sort(test、Comparator.comparing(int [] arr) - > arr [1])。thenComparing((int [] arr) - > arr [2]))); ' – pandaadb

答えて

0

int equal = s1[col].compareTo(s2[col]); 
return equal == 0 ? s1[col2].compareTo(s2[col2]) : equal; 

また、あなたが比較していることに注意してください数字ではなく文字列(辞書編集による比較)であるため、「10」は「2」より小さくなり、結果は次のようになります。

1 2 3 4 
8 6 10 11 
1 6 2 6 
5 6 7 8 
1 8 2 8 

列2と3で並べ替えると、

あなたが望むものでなければ、データを整数に変換して数値的に比較するだけです。あなたも同じことを行うにComparator.thenComparingを使用することができます

thenComparing(他のコンパレータ) は別のコンパレータと辞書式順序のコンパレータを返します。

このコンパレータで2つの要素が等しいとみなした場合、つまりcompare(a、b)== 0の場合、orderを決定するためにotherが使用されます。

Arrays.sort(array, 
    Comparator.<String[],String> 
    comparing(row -> row[1]) 
    .thenComparing(row2 -> row2[2]) 
);