2010-10-08 12 views
0

J'ai une classe appelée student, la classe a deux éléments (Name, ID). dans ma classe principale, j'ai créé environ 10 étudiants dans un tableau je l'ai appelé les étudiants,Tableau de tri du type d'objet par rapport à l'une des valeurs de l'objet

maintenant je veux trier le tableau des étudiants respectant l'ID, ou le nom !!

si je l'ai utilisé cette ligne de code

array.sort(students); 

est-il un moyen d'utiliser la méthode de tri et de choisir l'élément que je veux trier le tableau avec ???

Répondre

1

Vous pouvez utiliser quelque chose comme ceci:

Array.Sort(array, (s1, s2) => s1.Name.CompareTo(s2.Name)); 

Vous pouvez définir la fonction de comparaison mais vous souhaitez obtenir différents ordres de tri.

+0

merci, la façon la plus simple et la plus belle: D: D: D: D: DD – Nadeem

+0

J'ai une question, comment puis-je choisir quels indices dans le tableau que je veux trier? – Nadeem

+1

C'est une bonne question. Je pense que vous devrez soit extraire un sous-ensemble du tableau et le trier, ou avoir votre classe d'étudiant implémenter IComparable et ensuite passer l'index de départ et la longueur à Array.Sort(). Il ne semble pas qu'il y ait une surcharge de Array.Sort() qui vous permet de spécifier l'index de départ et la longueur ainsi qu'une fonction de comparaison inline. Vous pouvez également demander que quelqu'un d'autre ait une bonne idée en tant que nouvelle question SO. – WildCrustacean

1

Je voudrais utiliser une liste pour cela.

List<Student> students = new List<Student>{ new Student(), new Student(), new Student() } 

puis trier cette liste avec LINQ

var sortedStuds = students.OrderBy(s => s.ID).ToList(); 

où le s est un objet Student

+0

Inutilement inefficace. 'List ' a une méthode 'Sort' qui trie sur place. (Tout comme 'Array.Sort'.) – Timwi

+0

vrai, mais je ne savais pas que l'efficacité était un problème. BTW J'allais utiliser 'Sort', mais je l'ai utilisé ailleurs et je me suis fait prendre pour ça. Et j'aime juste Liste :) – EJC

0

vous pouvez utiliser LINQ:

sortedStudents1 = students.OrderBy(s=>s.Name).ToList(); 
sortedStudents2 = students.OrderBy(s=>s.ID).ToList(); 
1

Si c'est un tableau, le plus manière efficace est d'utiliser Array.Sort:

Array.Sort(array, (s1, s2) => s1.Name.CompareTo(s2.Name)); 
0

Bien que je préfère aussi la solution LINQ, vous pourriez aussi faire votre classe d'étudiants de mettre en œuvre IComparable, qui pourrait vous donner des options de tri plus complexes sans avoir à écrire une fonction à chaque fois en ligne.