我正在尝试根据第二列对二维数组进行排序,这是数组:
[1.1, 60.0]
[1.2, 66.66]
[1.3, -1.0]
[1.4, 50.0]
[1.5, 100.0]
[2.1, -1.0]
[2.2, -1.0]
[2.3, -1.0]
我研究了对多维数组进行排序的过程,并创建了以下代码:
private void sortKnowledgeScores(double[][] knowledgescores){
Arrays.sort(knowledgescores, new Comparator<double[]>() {
@Override
public int compare(double[] o1, double[] o2) {
double itemOne = o1[1];
double itemTwo = o2[1];
// sort on item id
if(itemOne < itemTwo){
return (int) itemOne;
}
return (int) itemIdTwo;
}
这会将数组重新排列为:
[2.3, -1.0]
[2.2, -1.0]
[2.1, -1.0]
[1.3, -1.0]
[1.1, 60.0]
[1.2, 66.66]
[1.4, 50.0]
[1.5, 100.0]
前三个值正确,但是将50放在60和60.66以下。如何调整我的sortKnowledgeScores函数以基于第一列以升序对数组进行排序?
答案 0 :(得分:3)
比较器应返回1,0,-1(更大,更相等,更少)。
通常,如果比较函数返回正结果,则第一个元素较大,如果它们等于0,则返回负值意味着第二个obj较大。
您返回的是值而不是比较结果。
您可以查看此doc
您需要将代码更改为:
public int compare(double[] o1, double[] o2) {
return (int) o1[1] - o2[1];
}
@Mick指出-请注意,您使用的索引:索引0用于第一列,索引1用于第二列
答案 1 :(得分:2)
首先,您使用了错误的索引。数组中的第一个元素位于索引0
您可以使用Comparator-Factory Comparator.comparingDouble
:
Comparator.comparingDouble(array -> array[0])
Arrays.sort(knowledgescores, Comparator.comparingDouble(array -> array[0]))
答案 2 :(得分:0)
您比较索引为“ 1”的元素。这将转换为第二列。如果排序应考虑第一列,则应使用索引“ 0”。
加上-如前所述-compare方法的工作方式如下:
将此对象与指定对象进行比较。当此对象小于,等于或大于指定的对象时,返回负整数,零或正整数。