【发布时间】:2018-01-23 05:26:00
【问题描述】:
我有一个二维字符串数组。所有的列都是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 并计算单词的出现次数。
所以,我正在使用比较器对它们进行排序,但它不起作用。
我的二维数组名为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;
}
});
它们按出现排序很好,但是当列相同时,单词没有顺序。
谢谢。
【问题讨论】:
-
"...单词没有顺序"?我不敢苟同:在您的示例中,所有出现 1 次的单词均按字母顺序排列。这不是你想要的吗?
-
@KevinAnderson 很抱歉没有理解,但我认为如果我给你一个例子会更好,
-
@KevinAnderson 这里是输入:“每一本书都是引用;每栋房子都是所有森林、矿山和采石场的引用;每个人都是他所有祖先的引用. " 输出应该是:[["and","4"],["every","3"],["is","3"],["a","3"],["报价","3"],["all","2"],["book","1"],["house","1"],["out","1"],["的","1"],["森林","1"],["矿山","1"],["石头","1"],["采石场","1"],["人","1"],["来自","1"],["他的","1"],["祖先","1"]]
-
我不明白它是如何按字母顺序排列的,“祖先”不应该在“全部”之后,也许我不明白这个问题@KevinAnderson
-
请展示您的实际输出,以证明您的问题。在您显示的所需输出中,“祖先”确实出现在“全部”之后,而不是立即之后。
标签: java arrays sorting multidimensional-array comparator