アプリ版:「スタンプのみでお礼する」機能のリリースについて

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][ ]についてソートしたいのですが、どうすればいいでしょうか?
教えてください。お願いします。

A 回答 (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;
}
}
    • good
    • 0
この回答へのお礼

何度も回答をくださってありがとうございます。
プログラムを実行してみたらきちんと並び替わっていました。

やはり、ArrayListのソートするしかないのですね。
本当に参考になりました。

お礼日時:2009/07/15 12:31

ああ、内容を勘違いしてましたね、失礼。



No2の方が回答しているようなやり方になるかと。
個人的には二次元配列で値を持たないほうがやりやすいんじゃないかと。
    • good
    • 0
この回答へのお礼

いえいえ、考えてくださっただけでうれしいです。

回答にかかれている「二次元配列で値を持たない方」というのはどういうことなのでしょうか?
もし時間があれば教えてください。

お礼日時:2009/07/14 23:32

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>のように別クラスを作ってしまった方が間違いが少ないだろう。
*/
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
プログラムを実行してみたらきれいに並び替わっていました。
本当に助かりました。

お礼日時:2009/07/14 23:25

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][ ]を使ってソートしたいのです。

補足日時:2009/07/13 18:13
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!