[英]Deep sorting in 2d array
我需要在Java中實現類似於sql sort的功能,其中我有一個函數,其中我將2d數組與2個列索引一起傳遞,此函數應在提供的列索引上返回已排序的2d數組。
簡而言之,我需要在2列上對2d數組進行排序。
我能夠在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在此先感謝RajuOutput : 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
當第一列相等時,只需與第二列進行比較,如下所示:
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(Comparator other)返回帶有另一個比較器的字典順序比較器。
如果此比較器認為兩個元素相等,即compare(a,b)== 0,則使用其他元素確定順序。
Arrays.sort(array,
Comparator.<String[],String>
comparing(row -> row[1])
.thenComparing(row2 -> row2[2])
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.