Алфавитный массив 2d в Java - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть двумерный массив, содержащий имя, фамилию и третий нерелевантный фрагмент данных в каждой строке.Мне нужно алфавитировать каждую строку на основе фамилии.Как я могу это сделать?

Я пытался использовать java.util.Arrays.sort (array [0]);но я могу получить только одну строку или один столбец.Мне нужно сохранить имя и фамилию вместе и отсортировать по фамилии.

так скажем, у меня есть этот массив

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

, который построен как этот

Кайл|Джонсон

Дрю |Андерсон

Джейкоб |Петерсон

и мне нужно, чтобы все закончилось вот так

Дрю |Андерсон

Кайл |Джонсон

Джейкоб |Петерсон

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

Вот простой метод, который будет сортировать двумерные массивы.Передайте индекс для использования в качестве второго параметра.В вашем случае это будет 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;

    }
0 голосов
/ 15 февраля 2012

Вы можете использовать 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 , чтобы понять значения, возвращаемые этими методами

...