2番目の列に基づいて並べ替える2D配列があります。最初の列は、2番目の列とペアを維持する必要があります。次のように列に基づいた2D整数配列の並べ替え
2Dアレイは、(2×10行列)最初である:
Iは、上記2次元アレイは、このようなソートされたい:今
4 15
9 12
8 11
0 10
5 10
1 9
2 9
3 9
7 8
6 4
、私が試してみましたこのコードにSort a two dimensional array based on one column:からの回答を適応することは
Arrays.sort(theArray, new Comparator<Integer[]>()
{
@Override
public int compare(Integer[] int1, Integer[] int2)
{
Integer numOfKeys1 = int1[1];
Integer numOfKeys2 = int2[1];
return numOfKeys1.compareTo(numOfKeys2);
}
});
しかし、配列をソートしていないようですまったく。 sort()関数を呼び出した後に配列を出力すると、配列は初期の順序になります。
私はまたここから答えを適応させようとしました:sorting 2D array of String in javaしかし私は同じ問題に遭遇しました。
これらのソリューションを適用する際にいくつかの致命的な間違いを犯しましたか?
また、この配列を降順でソートするにはどうすればよいですか? compare()のreturn文をこの行に置き換えることはできますか?
return -numOfKeys2.compareTo(numOfKeys1);
ご協力いただければ幸いです。ありがとう!
EDIT:問題が他の場所にあるかどうかを確認するために残りのコードを投稿するだけです。
public void Sort()
{
Integer[][] theArray = {{0,10},{1,9},{2,9},{3,9},{4,15},{5,10},{6,4},{7,8},{8,11},{9,12}};;
dump(theArray);
Arrays.sort(theArray, new Comparator<Integer[]>()
{
@Override
public int compare(Integer[] int1, Integer[] int2)
{
Integer numOfKeys1 = int1[1];
Integer numOfKeys2 = int2[1];
return numOfKeys1.compareTo(numOfKeys2);
}
});
System.out.println("====");
dump(theArray);
}
public void dump(Integer[][] array)
{
for(int p = 0, q = 10; p < q; p++)
{
System.out.println(array[p][0] + " " + array[p][1]);
}
}
EDIT 2:
私が働いてそれを持っています。みんなあなたの助けをありがとう。私は複数の並べ替え()関数(以前は動作していなかったもの、上記のもの)を持っていましたが、呼び出しを変更したとは思っていましたが、間違ったものを呼び出していました。その日のうちの1つ。
配列をソートする場合は、上記のコードを自由に使用してください。今は完全に機能しています。
このコードは実行しないでください。配列の配列には2つの要素の配列の束を持つ単一の配列があります。それを印刷するときに2つの10要素配列の配列として扱います。 –
あなたは正しいです、私は私の指数が混ざっていました。私を修正してくれてありがとう。そして、あなたの助けに感謝します。 – Drake