0

並べ替えたい double 値を持つ多次元配列があります。

//declare array    
standingsB = new Double[10][2];

//populate array from the temparray created during read from file
arryLgt = 0;
        for (int row = 0; row < standingsB.length; row++){

            for (int column = 0; column < standingsB[row].length; column++) {


                standingsB[row][column] = Double.parseDouble(tempStandingsArray[arryLgt]);
                arryLgt = arryLgt + 1;
            }
        }

配列には [1.5,7.0] [4.2,4.0] などの値があります...

次の部分では、それがどのように機能するかはよくわかりませんが、ここで他の記事を読むと、知識がなくてもコピーできるのでこれが最高です

Arrays.sort(standingsB, new Comparator<Double[]>() {
            @Override
            public int compare(Double[] s1, Double[] s2) {
                compare(s1, s2);
            }
        });

上記はコンパイルに失敗します (return ステートメントが欠落している)。これは、コンパレータで Arrays.sort を使用する方法がわからないため、予想されることです。しかし、私と同じように Java (および一般的なプログラミング) に慣れていない私が正しいページにいるのかどうかさえわかりません。

ご覧いただきありがとうございます。

4

4 に答える 4

1

@Tap が提供する回答は、質問者の質問を 100% 満たしていないと思います。説明したように、配列は最初のインデックスのみでその値に対してソートされます。予想どおり、ソートの結果は で{{2,0},{1,2},{1,1}}はあり{{1,2},{1,1},{2,0}}ません{{1,1},{1,2},{2,0}}ArrayComparatorインターフェイスを実装するすべてのタイプのジェネリックを実装し、ブログComparableでリリースしました。

public class ArrayComparator<T extends Comparable<T>> implements Comparator<T[]> {
    @Override public int compare(T[] arrayA, T[] arrayB) {
        if(arrayA==arrayB) return 0; int compare;
        for(int index=0;index<arrayA.length;index++)
            if(index<arrayB.length) {
                if((compare=arrayA[index].compareTo(arrayB[index]))!=0)
                    return compare;
            } else return 1; //first array is longer
        if(arrayA.length==arrayB.length)
             return 0; //arrays are equal
        else return -1; //first array is shorter 
    }
}

これにより、ArrayComparator多次元配列をソートできます。

String[][] sorted = new String[][]{{"A","B"},{"B","C"},{"A","C"}};
Arrays.sort(sorted, new ArrayComparator<>());

Lists配列の:

List<String[]> sorted = new ArrayList<>();
sorted.add(new String[]{"A","B"});
sorted.add(new String[]{"B","C"});
sorted.add(new String[]{"A","C"});
sorted.sort(new ArrayComparator<>());

簡単に構築でき(Sorted)Mapsます:

Map<String[],Object> sorted = new TreeMap<>(new ArrayComparator<>());
sorted.put(new String[]{"A","B"}, new Object());
sorted.put(new String[]{"B","C"}, new Object());
sorted.put(new String[]{"A","C"}, new Object());

ジェネリック型はComparableインターフェイスを実装する必要があることを覚えておいてください。

于 2015-12-30T21:27:54.490 に答える
0

int[][]コンテストのラムダソート配列を使用したソリューションの例:

Arrays.sort(contests, (a, b)->Integer.compare(b[0], a[0]));
于 2019-08-31T16:08:17.283 に答える