- PR -

Arrays.sortでの複数キー指定について

1
投稿者投稿内容
kei
会議室デビュー日: 2004/10/22
投稿数: 3
投稿日時: 2004-10-22 19:06
はじめまして。
Arrays.sortを使用してのソート方法で質問があり書き込みしました。

String Str[][] = new String[x][y] ;

上記の様な二次元配列のオブジェクトにソートをかけたいのですが

xの昇順・yの昇順
xの降順・yの降順

上記のソートはかけることができたのですが、
実は「xの昇順・yの降順」にソートをかけるのが今回の目的です。

検索エンジンなどを駆使して調べてみたのですが
方法が書いてあるところがなく、質問させてもらった次第です。

Arrays.sortではできないというのであればそれも教えていただけると助かります。
よろしくお願いします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-10-22 19:42
それだけできている、ということはComparatorを使っているということですよね?
だとしたら少し工夫すればできそうなものですが、どのようにコーディングしていますか?

kei
会議室デビュー日: 2004/10/22
投稿数: 3
投稿日時: 2004-10-22 19:50
返信ありがとうございます。

今のコーディング状態を添付します。

private class innerComparator implements Comparator
{
public int compare(Object o1, Object o2)
{

String[] obj1 = (String[])o1;
String[] obj2 = (String[])o2;
StringBuffer k1 = new StringBuffer() ;
StringBuffer k2 = new StringBuffer() ;

k1.append(obj1[x]) ;
k2.append(obj2[x]) ;

k1.append(obj1[y]) ;
k2.append(obj2[y]) ;

return k1.toString().compareTo(k2.toString()) ;
}
}

以上のロジックでComparatorを作成しています。

降順の場合にはリターンを以下の様に変えています。
return (k1.toString().compareTo(k2.toString())) * (-1) ;

なので、全体の昇順・降順はコーディングできるのですが
キー毎に昇順・降順に並べる方法が思いつきません。

よろしくお願いします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-10-23 09:11
引用:

keiさんの書き込み (2004-10-22 19:50) より:
k1.append(obj1[x]) ;
k2.append(obj2[x]) ;

k1.append(obj1[y]) ;
k2.append(obj2[y]) ;


xとyはどこから出てきたんですか?
それぞれの次元でソートをするのかと思ったのですが、そうではないようですね。
最初の書き込みのタイトルに「複数のキー」というのがあったのですが、もしかしてx=0、
y=1という固定値でしょうか。

String[] obj1 = (String[])o1;
String[] obj2 = (String[])o2;

if(!obj1[x].equals(obj2[x])) {
return obj1[x].compareTo(obj2[x]);
} else {
return obj2[y].compareTo(obj1[y]);
}

でどうですか?
kei
会議室デビュー日: 2004/10/22
投稿数: 3
投稿日時: 2004-10-24 12:01
返信遅くなってしまい申し訳ないです。

レスありがとうございます。

前の説明ではわかりにくかったですね^^;
やりたいことは
サトウ、15
カトウ、17
サトウ、11

この様な内容の配列を
カトウ、17
サトウ、11
サトウ、15
という風にソートをすることです。

ukさんの方法でやってみます。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)