2012-02-15 15 views
0

私は、各行に姓、名、および関連性のない3番目のデータを含む2次元配列を持っています。姓に基づいて各行をアルファベット順に並べる必要があります。どうすればこれを達成できますか?2d配列をJavaでアルファベット順に並べ替え

私はjava.util.Arrays.sort(array [0]);を使ってみました。しかし、私は1つの行または1つの列を並べ替えることしかできません。私は姓と名を一緒にして姓で並べる必要があります。

ので、私はこの

カイルのように構築され、この配列

String array [][]=new String[3][2]; 
     array[0][0]="Kyle"; 
     array[0][1]="Johnson"; 
     array[1][0]="Drew"; 
     array[1][1]="Anderson"; 
     array[2][0]="Jacob"; 
     array[2][1]="Peterson"; 

を持っていると言います| Johnson

ドリュー|アンダーソン

ヤコブ|ピーターソン

このようになるには、これが必要です。

ドリュー|アンダーソン

カイル| Johnson

Jacob | Peterson

+1

_alphabetize_? –

+1

[これまでに何を試しましたか?](http://mattgemmell.com/2008/12/08/what-have-you-tried) –

+0

どうしてですか? ?私のリンクは、何かを尋ねるときに何を提供すべきかを教えてくれます... –

答えて

0

String.compareTo(String)を使用すると、2つの文字列の辞書順を取得し、独自の関数を作成することができます。 ルールは、(擬似コード)単純である:

be [s1,d1] // i.e s1 = Kyle, d1 = Johnson 
be [s2,d2] 
if (s1 < s2) // means "Does s1 should come before s2 lexicographically" ie. s1.compareTo(s2) 
    [s1,d1] < [s2,d2] 
else if (s1 > s2) 
    [s2,d2] < [s1,d1] 
else 
    if (d1 < d2) 
     etc... 

String.compareTo & String.compareToIgnoreCaseこれらの方法

+0

これは私が必要としているように見えます。大文字小文字を無視するにはどうすればよいですか? 編集*速いgoogle検索が有効になりました.compareToIgnoreCase()、ありがとうございました! – user1210559

+0

私は実際に答えの中でそれをリンクしました...コードセグメントの下の行を見てください:) – Boaz

1

の戻り値を理解するために参照してここ2Dアレイをソートする簡単な方法です。 2番目のパラメータとしてソートに使用するインデックスを渡します。 あなたの場合、のように1になります。は1でインデックスされます。

簡潔さのためにNULLチェックは省略しました。

public static String[][] sort(String[][] array, final int sortIndex) { 


     if (array.length < 2) { 
      return array; 
     } 


     Arrays.sort(array, new Comparator<String[]>() { 

      public int compare(String[] o1, String[] o2) { 
       return o1[sortIndex].compareToIgnoreCase(o2[sortIndex]); 
      } 
     }); 

     return array; 

    } 
関連する問題