2次元配列の並び替えをやりたいのですが、どうすればわかりません。
int[][] list = new int[2][5];
の中身が
list[0][0]=0; list[1][0]=4;
list[0][1]=1; list[1][1]=1;
list[0][2]=2; list[1][2]=3;
list[0][3]=3; list[1][3]=2;
list[0][4]=4; list[1][4]=0;
だったとすると、list[0][ ]についてソートされていますが、
これをlist[1][ ]についてソートしたいのです。
つまり、
newlist[0][0]=4; newlist[1][0]=0;
newlist[0][1]=1; newlist[1][1]=1;
newlist[0][2]=3; newlist[1][2]=2;
newlist[0][3]=2; newlist[1][3]=3;
newlist[0][4]=0; newlist[1][4]=4;
のようにlist[1][ ]についてソートしたいのですが、どうすればいいでしょうか?
教えてください。お願いします。
No.4ベストアンサー
- 回答日時:
No2さんの言っている内容をコード化したようなもんですが。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Sort_2 {
public static void main(String[] args){
int[][] list = new int[][]{{0,1,2,3,4},{4,1,3,2,0}};
List<SortObj> sortList = new ArrayList<SortObj>();
for ( int i = 0 ; i < 4 ; i ++ ){
sortList.add(new SortObj(list[0][i],list[1][i]));
}
System.out.println("ソート前");
for ( SortObj obj : sortList ){
System.out.println("[" + obj.getNum1() + "][" + obj.getNum2() + "]");
}
Collections.sort(sortList, new Comparator<SortObj>(){
public int compare(SortObj t1, SortObj t2) {
return t1.getNum2() - t2.getNum2();
}
});
System.out.println("ソート後");
for ( SortObj obj : sortList ){
System.out.println("[" + obj.getNum1() + "][" + obj.getNum2() + "]");
}
}
}
class SortObj{
private int num1;
private int num2;
public SortObj(int num1,int num2){
this.setNum1(num1);
this.setNum2(num2);
}
public int getNum1() {
return num1;
}
public void setNum1(int num1) {
this.num1 = num1;
}
public int getNum2() {
return num2;
}
public void setNum2(int num2) {
this.num2 = num2;
}
}
何度も回答をくださってありがとうございます。
プログラムを実行してみたらきちんと並び替わっていました。
やはり、ArrayListのソートするしかないのですね。
本当に参考になりました。
No.3
- 回答日時:
ああ、内容を勘違いしてましたね、失礼。
No2の方が回答しているようなやり方になるかと。
個人的には二次元配列で値を持たないほうがやりやすいんじゃないかと。
いえいえ、考えてくださっただけでうれしいです。
回答にかかれている「二次元配列で値を持たない方」というのはどういうことなのでしょうか?
もし時間があれば教えてください。
No.2
- 回答日時:
class hoge{
public static void main(String[] args){
int[][] list = new int[][]{{0,1,2,3,4},{4,1,3,2,0}};
/* ソート前 */
java.util.ArrayList<java.util.ArrayList<Integer>> y = new java.util.ArrayList<java.util.ArrayList<Integer>>();
for (int i = 0;i < list[0].length;i++){
java.util.ArrayList<Integer> x = new java.util.ArrayList<Integer>();
for (int j = 0;j < list.length;j++){
x.add(list[j][i]);
System.out.print(list[j][i]);
System.out.print(" ");
}
y.add(x);
System.out.println();
}
System.out.println();
java.util.Collections.sort(y,new comp());
for (int i = 0;i < y.size();i++){
for (int j = 0;j < y.get(i).size();j++){
list[j][i] = y.get(i).get(j);
}
}
/* ソート後 */
for (int i = 0;i < list[0].length;i++){
for (int j = 0;j < list.length;j++){
System.out.print(list[j][i]);
System.out.print(" ");
}
System.out.println();
}
}
}
class comp implements java.util.Comparator<java.util.ArrayList<Integer>>{
public int compare(java.util.ArrayList<Integer> o1, java.util.ArrayList<Integer> o2){
return o1.get(1) - o2.get(1);
}
public boolean equals(java.util.ArrayList<Integer> o1, java.util.ArrayList<Integer> o2){
return (o1.get(1) - o2.get(1)) == 0;
}
}
/* ややこしいが,できなくはない */
/*
途中,ArrayListを使って
{{0,4},{1,1},{2,3},{3,2},{4,0}}
を作っている。
上限個数を考えなくていいのでArrayListの方が基本的に好きだけど,
このままだとジャグ配列みたいのになりやすいので
http://ja.wikipedia.org/wiki/%E9%85%8D%E5%88%97# …
ArrayList<<ArrayList<int>>の代わりに
ArrayList<AnotherClass>のように別クラスを作ってしまった方が間違いが少ないだろう。
*/
No.1
- 回答日時:
public static void main(String[] args){
int[][] list = new int[][]{{0,1,2,3,4},{4,1,3,2,0}};
System.out.println("ソート前");
for(int i = 0 ; i < list.length ; i ++ ){
for ( int j = 0 ; j < list[i].length ; j ++ ){
System.out.println("list[" + i + "][" + j + "]=" + list[i][j] );
}
}
Arrays.sort(list[1]);
System.out.println("ソート後");
for(int i = 0 ; i < list.length ; i ++ ){
for ( int j = 0 ; j < list[i].length ; j ++ ){
System.out.println("list[" + i + "][" + j + "]=" + list[i][j] );
}
}
}
この回答への補足
回答ありがとうございます。
実行してみましたが、これではうまくいきませんでした。
このプログラムでは、ソート後のlist[0][ ]の方も0,1,2,3,4の順番に変わってしまいます。
各行の関係は壊さずにlist[1][ ]を使ってソートしたいのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- 邦楽 ネガティブな精神状態をポシティブな精神状態に変えてくれて勇気や希望や元気を与えてくれる曲 7 2022/05/24 12:30
- C言語・C++・C# クラスのメンバ変数を基準に並べ替えをしたい 5 2022/12/25 17:40
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- その他(音楽・ダンス・舞台芸能) 次の曲以外で心に響く・心を癒してくれる・心にしみる・感動を与えてくれる歌手・曲があれば教 6 2023/01/02 22:47
- 音楽配信 地球に生まれてきて良かったと思える歌手曲は何々あるでしょうか。ちなみに私は次のような歌手 5 2023/01/10 15:09
- 邦楽 ストレスを発散したりポシティブに保つためにもYouTube等でどのような曲を聴いている 3 2022/05/14 16:56
- その他(プログラミング・Web制作) python 3.10で 同じlistに同じ構文で同じデータ代入した結果が異なる現象発生 7 2022/06/18 11:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
java キーボード入力された値の...
-
数値⇒漢数字変換 java
-
論理演算子”||”またはの入力方法
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
Ctrl+Zが入力されると終了する...
-
countに実行した回数をいれたい...
-
Java、2の0乗~10乗の表示
-
テキストボックスに入力された...
-
コマンドライン引数の例外処理...
-
2つのスクロールバーを連動させ...
-
7つ数字を表示したら改行すると...
-
エラー(互換性の無い型)
-
階乗
-
入力データ数を入力して、その...
-
画面出力の際の繰り返しと入力...
-
入力された入力値と最大値、最...
-
キーボードから10人分の点数を...
-
C#の質問
-
フィールド名やメソッド名に日...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
Randomメソッドの確率設定
-
論理演算子”||”またはの入力方法
-
テキストボックスに入力された...
-
java キーボード入力された値の...
-
countに実行した回数をいれたい...
-
Java 配列<選挙>
-
総称型ArrayList<E>への参照...
-
Java、2の0乗~10乗の表示
-
2つのスクロールバーを連動させ...
-
数値⇒漢数字変換 java
-
Java 入力した整数値の合計を、...
-
配列を逆順させて表示させる方...
-
エラー(互換性の無い型)
-
javaで数独を解くプログラムに...
-
2次元配列の並び替え
-
javaのエラーが回収できない
-
7つ数字を表示したら改行すると...
-
java 電卓のプログラム
おすすめ情報