根据最后一栏排序

时间:2012-01-12 15:31:37

标签: java sorting

我有一个这样的数组:

 UserID |ItemID | Score
    1      10     2.0
    1      11     1.2
    1      12     1.4

..........

我想根据得分列对数组进行排序。我的代码是:

double[][] arr=new double [1000][3];

    int i=0;int j=0;int k=0;
    while ((phrase = br.readLine()) != null) {
         String[] splited =phrase.split("\t");
         arr[i][0]=Double.parseDouble(splited[0]);
         i++;
         arr[j][1]=Double.parseDouble(splited[1]);
         j++;
         arr[k][2]=Double.parseDouble(splited[2]);
         k++;
    }


    //print(a);
    System.out.println();
   Arrays.sort(arr, new java.util.Comparator<double[]>() {
       public int compare(double[] a, double[] b) {
            return (int)(a[1] -b[1]);
        }
    });
    print(arr);

但它不起作用!怎么了?

3 个答案:

答案 0 :(得分:2)

如果要按 last 列排序,则必须比较第二维中的 last 索引,即2.因此,您应该{{1}而不是return (int)(a[2] -b[2]);

顺便说一下,您为什么使用3个索引return (int)(a[1] -b[1]);ij?你为什么不只使用一个,例如k

编辑

重新考虑比较,你不应该使用i,而应该使用@Prashant Bhate建议的(int)(a[2] -b[2])

原因是如果两个值之间的差异小于1或大于-1,则转换为Double.compare(a[2], b[2])将导致0,这意味着两者都相等。示例:int

答案 1 :(得分:2)

如果需要按第三列排序,则需要使用a[2]

public static void main(String[] args) {
    double[][] arr = { { 1, 10, 2.0 }, { 1, 11, 1.2 }, { 1, 12, 1.4 }, };
    ;
    Arrays.sort(arr, new Comparator<double[]>() {
        public int compare(double[] o1, double[] o2) {
            return Double.compare(o1[2], o2[2]);
        }
    });

    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr.length; j++) {
            System.out.print(arr[i][j]);
            System.out.print("\t");
        }
        System.out.println();
    }

}

答案 2 :(得分:1)

这是因为得分列是表格的第3列 - 您在第二列上排序 - 即

    Arrays.sort(arr, new java.util.Comparator<double[]>() {
    public int compare(double[] a, double[] b) {
        return (int)(a[2] - b[2]);
    }