[英]Java - How to sort a 2D array numerically and alphabetically?
我有一個二維的字符串數組。 所有列都是數字String
。 我需要按列的降序對數組進行排序,當列相同時,我需要按行中的單詞按字母順序對它們進行排序。
例:
input = "Practice makes perfect. you'll only get Perfect by practice. just practice!"
output: [ ["practice", "3"], ["perfect", "2"],
["by", "1"], ["get", "1"], ["just", "1"],
["makes", "1"], ["only", "1"], ["youll", "1"] ]
因此,我完成了所有工作,例如解析input
並計算單詞的出現。
因此,我正在使用比較器對它們進行排序,但無法正常工作。 我的2D數組稱為result
,下面是代碼:
Arrays.sort(result, new Comparator<String[]>() {
@Override
public int compare(String[] a, String[] b) {
int diff = b[1].compareTo(a[1]);
if (diff == 0) {
diff = b[0].compareTo(a[0]);
}
return diff;
}
});
它們按出現的順序排序就很好了,但是當cols相同時,單詞沒有順序。
謝謝。
我認為您想解決以下問題:無論輸入什么字符串,您都想創建一個二維數組,其中存儲每個唯一單詞及其出現次數。
現在,您要根據單詞的出現次數以降序對2D數組進行排序,如果出現次數在多個單詞的出現次數之間匹配,則根據它們之間的字母順序按降序對它們進行排序。
我在沒有比較器的情況下對數組進行了排序,可能會對您有所幫助。
private static void sort2DArray(String[][] string2DArray) {
int maxInt;
String maxKey;
String maxValue;
int flag = 0;
/* Sort the 2D Array */
for (int m = 0; m < string2DArray.length; m++) {
maxInt = Integer.parseInt(string2DArray[m][1]);
for (int n = 0; n < string2DArray.length; n++) {
/* swap on the basis of word's occurrences */
if (maxInt > Integer.parseInt(string2DArray[n][1])) {
maxKey = string2DArray[m][0];
maxValue = string2DArray[m][1];
string2DArray[m][0] = string2DArray[n][0];
string2DArray[m][1] = string2DArray[n][1];
string2DArray[n][0] = maxKey;
string2DArray[n][1] = maxValue;
maxInt = Integer.parseInt(string2DArray[n][1]);
} else {
/* swap on the basis of word */
if (maxInt == Integer.parseInt(string2DArray[n][1])) {
flag = string2DArray[m][0].compareToIgnoreCase(string2DArray[n][0]);
if (flag > 0) {
maxKey = string2DArray[m][0];
maxValue = string2DArray[m][1];
string2DArray[m][0] = string2DArray[n][0];
string2DArray[m][1] = string2DArray[n][1];
string2DArray[n][0] = maxKey;
string2DArray[n][1] = maxValue;
}
}
}
}
}
}
對於出現的降序和單詞的字母順序,您可以使用以下形式的比較器
Arrays.sort(arr,(a,b) -> a[1].compareTo(b[1])==0? a[0].compareTo(b[0]) : 0-(a[1].compareTo(b[1])));
我使用的是lambda表達式,該表達式基本上檢查出現次數是否相等,如果相等,則比較單詞的值,否則返回帶有更改符號的出現次數的比較(以降序排列)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.