8
votes

Comment trier une liste d'objets par un membre spécifique?

dire que j'ai une liste d'objets de personne: xxx pré>

Comment triera-i de cette liste par l'autre nom? p>

List<Person> myPeople = GetMyPeople();
myPeople.Sort(/* what goes here? */);


7 Réponses :


15
votes

Sous C # 3.0 Vous pouvez utiliser l'instruction LINQ suivante:

var sortedEnumerable = myPeople.OrderBy( p => p.LastName );


0 commentaires

1
votes

Un Icomarer . Si vous utilisez C # 3.0 et .NET.3.5, consultez les méthodes LINQ, surtenscialement iEnumerable .orderby () .


0 commentaires

2
votes

Une option consiste à écrire un comparateur:

myPeople.Sort((p1, p2) => String.Compare(p1.LastName, p2.LastName));


0 commentaires

3
votes

Comme d'autres personnes ont suggéré, vous pouvez utiliser une personnalisation iComparer méthode pour trier votre liste. Si vous ne le faites qu'une fois, le moyen le plus simple utilise une méthode anonyme, comme si telle: xxx pré>

alternativement, vous pouvez implémenter Icomparable sur votre classe de votre personne, de sorte que la classe sait comment trier lui-même: P>

class Person : IComparable<Person>
{
    int id;
    string FirstName;
    string LastName;

    public int CompareTo(Person other)
    {
        return LastName.CompareTo(other.LastName);
    }
}


0 commentaires


0
votes

Rien n'a besoin d'aller à l'intérieur de votre méthode "Tri" Capt de la méthode Si votre classe implémente icomparable code>.

Cochez cette page Link pour détail. p>

code: p>

class person : IComparable<person>
{ 
  int id; 
  string FirstName; 
  string LastName; 

public int CompareTo(person other)
    {
        //If you want to sort on FirstName
        return FirstName.CompareTo(other.FirstName);
    }


} 


0 commentaires

1
votes

Exemple d'ICOMPARE

   /// <summary>
   /// Sort class on LastName Descending Order
   /// </summary>
   private class PersonLastNameDescending : IComparer<Person>
   {
      public int Compare(Person aX, Person aY)
      {
         return aY.LastName.CompareTo(aX.LastName);
      } // end Compare(...)
   } // end inner class PersonLastNameDescending 

   MyPeople.Sort(new PersonLastNameDescending());


0 commentaires