2012-02-15 2 views
0

J'ai un tableau 2d contenant le prénom, le nom et un troisième élément de données non pertinent sur chaque ligne. J'ai besoin d'alphabétiser chaque rangée en fonction du nom de famille. Comment puis-je accomplir cela?Alphabétisation d'un tableau 2D en Java

J'ai essayé d'utiliser java.util.Arrays.sort (array [0]); mais je peux seulement l'obtenir pour trier une rangée ou une colonne. Je dois garder le prénom et le nom ensemble et trier par nom de famille.

donc dire que j'ai ce tableau

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

qui est construit comme celui-ci

Kyle | Johnson

Drew | Anderson

Jacob | Peterson

et j'ai besoin pour finir comme ça

Drew | Anderson

Kyle | Johnson

Jacob | Peterson

+1

_alphabetize_? pouvez-vous s'il vous plaît poster les données de l'échantillon –

+1

[Qu'avez-vous essayé jusqu'à présent ??] (http://mattgemmell.com/2008/12/08/what-have-you-tried) –

+0

pas du tout ... pourquoi? ? mon lien dit ce qui devrait être fourni quand nous demandons quelque chose ... –

Répondre

0

Vous pouvez utiliser String.compareTo (String) pour obtenir l'ordre lexicographique de 2 chaînes et formuler votre propre fonction pour le faire. Les règles sont simples (code pseudo):

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... 

voir String.compareTo & String.compareToIgnoreCase pour comprendre les valeurs de retour de ces méthodes

+0

Cool cela ressemble à ce dont j'ai besoin, Une question. Comment puis-je l'obtenir pour ignorer le cas? Modifier * recherche google rapide s'est avéré .compareToIgnoreCase(), merci! – user1210559

+0

Je l'ai en fait lié à l'intérieur de la réponse ... regardez la ligne sous le segment de code :) – Boaz

1

Voici une méthode simple qui triera des tableaux 2D. Passez l'index à utiliser pour le tri en tant que second paramètre. Dans votre cas, il sera 1 comme le nom est indexé à 1.

J'ai omis la vérification NULL pour la brièveté.

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; 

    }