在Java中排序一个二维结构体数组



给定2D数组,PearsonArray[100][100],我如何根据双PearsonArray[][].pearson_correlation按降序排序?行只是整数,列是结构体(如下所示)。

结果数据如下:

行0:

[0] = => [TRAIN_USER TEST_USER: 201: 13日关系:

0.2222194792894441

[1] = => [TRAIN_USER TEST_USER: 201: 15日关系:

0.9549380840555494

[2] = => [TRAIN_USER TEST_USER: 201: 52岁的相关性:

0.8741572761215378

[3] = => [TRAIN_USER TEST_USER: 201: 54岁的相关性:

0.9930549935286451

[4] = => [TRAIN_USER TEST_USER: 201: 62年,相关:

0.37139067635410394

[5] = => [TRAIN_USER TEST_USER: 201: 63年,相关:

0.8904703363154174
public class myPearsonStruct {
    int testUserID;
    int trainUserID;
    double pearson_correlation;
    public myPearsonStruct(int tester, int trainer, double correlation){
        this.testUserID = tester;
        this.trainUserID = trainer;
        this.pearson_correlation = correlation;
    }
}

我想你想排序类myPearsonStruct的实例(也许你想有大写"M"作为类名)在一个维度的顺序的pearson_correlation字段

你可以使用数组。Sort方法来做排序。但是你必须先把二维数组转换成一维数组。如何排序并不重要,因为无论如何你都要排序。

例如,

myPearsonStruct[] mpsArray = new myPearsonStruct[100*100];
for(int i=0;i<100;i++) {
  for(int j=0;j<100;j++) {
    mpsArray[i*100+j] = PearsonArray[i][j];
  }
}

那么你需要实现一个接口Comparable来指定如何确定顺序。

public class PearsonComparator implements Comparator<myPearsonStruct> {
  public int compare(myPearsonStruct o1, myPearsonStruct o2) {
    // descending order
    if (o1.pearson_correlation < o2.pearson_correlation) return 1;
    else if (o1.pearson_correlation > o2.pearson_correlation) return -1;
    else return 0;
  }
}
有了这两段代码,您就可以这样轻松地对数据进行排序:
Arrays.sort(mpsArray, new PearsonComparator());

结果将放在mpsArray

最新更新