Javaを使用して全体としてソートする2D配列があります。
さまざまなリンクを見てきました コンパレータを使用して2次元のArrayListをソートする方法。
ただし、常に特定の要素でソートされます。2次元配列全体をソートできるようにしたい。たとえば、
int[][] r = {{1,7,5},{1,3,5},{1,3,6}, {2,3,1}};
並べ替えで私に与える必要があります
{1,2,3},{1,3,5},{1,3,6},{1,5,7}.
ありがとう!
Javaを使用して全体としてソートする2D配列があります。
さまざまなリンクを見てきました コンパレータを使用して2次元のArrayListをソートする方法。
ただし、常に特定の要素でソートされます。2次元配列全体をソートできるようにしたい。たとえば、
int[][] r = {{1,7,5},{1,3,5},{1,3,6}, {2,3,1}};
並べ替えで私に与える必要があります
{1,2,3},{1,3,5},{1,3,6},{1,5,7}.
ありがとう!
これはあなたのニーズに合っています:
Arrays.sort(array, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
Arrays.sort(o1);
Arrays.sort(o2);
for (int i = 0; i < o1.length && i < o2.length; i++) {
if (o1[i] != o2[i]) {
return o1[i] < o2[i] ? -1 : 1;
}
}
if (o1.length != o2.length) {
return o1.length < o2.length ? -1 : 1;
}
return 0;
}
});
これは私がJavaでそれを行う方法です:
private static void sortArray(int[][] array) {
// Perform initial sorting
for (int[] subArray : array) {
Arrays.sort(subArray);
}
// Sort each array by its contents (similar to string sorting)
Arrays.sort(array, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
int length = Math.min(o1.length, o2.length);
for (int i = 0; i < length; i++) {
if (o1[i] > o2[i]) return 1;
if (o1[i] < o2[i]) return -1;
}
// Longer arrays come after shorter arrays, but only if the rest is equal
if (o1.length > o2.length) return 1;
if (o1.length < o2.length) return -1;
return 0;
}
});
}
最初のステップでは、2D 配列内のすべての配列を並べ替え、次に 2D 配列内の各配列の内容に基づいて配列全体を並べ替えます。コンパレーターは、大文字と小文字を区別する文字列コンパレーターに期待されるものと同様に機能します。
必要なのは、基準に従って 2 つの整数のリストを比較できるカスタム Comparator です。
このコンパレータを使用して並べ替える前に、まずリスト自体を並べ替える必要があります。