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
そうしないと、カスタム比較器を使用できなくなります。