Javaで一致した配列をソートする 質問する

Javaで一致した配列をソートする 質問する

2つの配列(Java)があるとします。

int[] 数値; および int[] 色;

数値の各 i 番目の要素は、色の i 番目の要素に対応します。例: 数値 = {4,2,1}、色 = {0x11, 0x24, 0x01}; は、数値 4 は色 0x11、数値 2 は色 0x24 などであることを意味します。

数字の配列をソートしたいのですが、各要素が色のペアと一致するようにしたいです。

例: 数字 = {1,2,4}; 色 = {0x01,0x24,0x11};

これを行う最もクリーンで簡単な方法は何ですか? 配列には数千の項目があるため、配置しておくのが最適ですが、必須ではありません。Arrays.sort() とカスタム コンパレータを実行するのは理にかなっていますか? ライブラリ関数をできるだけ使用することをお勧めします。

注: 2 つの要素のクラスを作成し、カスタム コンパレータを使用するのが「最善」の解決策であることはわかっています。この質問は、これを最も速くコーディングする方法を尋ねることを目的としています。プログラミング コンテストに参加していると想像してください。コンパレータ用の匿名クラスなど、余分なクラスをすべて作成したくないでしょう。それよりは、Java を忘れてください。C でコーディングするとしたらどうでしょうか。

ベストアンサー1

インデックス付きの 3 番目の配列を保持し、その配列に基づいてソートしてデータをそのまま残す場合は、カスタム比較演算子で sort() を使用できます。

Javaコードの例:

Integer[] idx = new Integer[numbers.length];
for( int i = 0 ; i < idx.length; i++ ) idx[i] = i;              
Arrays.sort(idx, new Comparator<Integer>() {
    public int compare(Integer i1, Integer i2) {                        
        return Double.compare(numbers[i1], numbers[i2]);
    }                   
});

// numbers[idx[i]] is the sorted number at index i
// colors[idx[i]] is the sorted color at index i

Integerの代わりにを使用する必要があることに注意してください。intそうしないと、カスタム比較器を使用できなくなります。

おすすめ記事