0

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

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";

これはこのように構築されています

カイル | カイル | ジョンソン

ドリュー | ドリュー | アンダーソン

ジェイコブ| ピーターソン

そして、私はそれがこのように終わる必要があります

ドリュー | ドリュー | アンダーソン

カイル | カイル | ジョンソン

ジェイコブ| ピーターソン

4

2 に答える 2

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;

    }
于 2012-02-15T06:57:40.450 に答える
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を参照してください。

于 2012-02-15T06:31:39.307 に答える