0

これはよくある質問だと思いますが、他の回答をいくつか見て、コードを機能させることができませんでした。

double の 2 次元配列、2 つの列、および一連の行があり、配列を最初の列で昇順に並べ替えたいと考えています。

私の配列は ratio[][] と呼ばれ、次のコードを試しました:

  Arrays.sort(ratio, new Comparator<double[]>() {

    @Override
    public double compare(double[] o1, double[] o2) {
        return valueOf(o1[0]).compareTo(valueOf(o2[0]));
    }

  });

コンパイラは一連のエラーを検出しています。java.util.Arrays と java.util.Comparator をインポートしました。私は何を間違っていますか?

4

3 に答える 3

3

double 配列の順序を最初の要素で定義したい場合 (これはあなたがやろうとしていることのようです)、必要なことは次のとおりです。

Arrays.sort(ratio, new Comparator<double[]>() {
    @Override
    public double compare(double[] o1, double[] o2) {
        return Double.compare(o1[0], o2[0]);
    }
});

Double比較ごとにオブジェクトを作成する (または配列を type に変換する) 必要はありませんDouble[]

于 2012-10-30T05:20:12.350 に答える
2

あなたvalueOfDoubleクラスの静的メソッドです。その上で呼び出す必要があります。

first column各配列に基づいて 2 次元配列を並べ替えるだけの場合は、次のようになります。

Arrays.sort(ratio, new Comparator<double[]>() {
        @Override
        public int compare(double[] o1, double[] o2) {
            return Double.valueOf(o1[0]).compareTo(Double.valueOf(o2[0]));
        }
});

また、 anはonlyであるため、 Comparatoron 型を使用できます。したがって、に変換する必要はありません。double[]arrayobjectDouble[][]

更新: -

  • @Ted の回答のようにメソッドを使用することもできDouble.compare(double, double)ます。これは、2 つの double オブジェクトを作成する必要がないためです。しかし、それは小規模ではあまり問題になりません。比較が多い大規模なアプリケーションを構築している場合は、間違いなくこれを使用する必要があります。
于 2012-10-30T05:14:44.923 に答える
0

ただの提案..

  class Row {
      public double one;
      public double two;
  }  

  Row[] rows = // create this

  Arrays.sort(rows, new Comparator<Row>() {
      public int compare(Row o1, Row o2) {
          double c = o1.one - o2.one;
          return c < 0.0 ? -1 : c > 0.0 ? 1 : 0;
      }
  }
于 2012-10-30T05:21:47.747 に答える