Je veux trier une liste en C#.
Par exemple, lorsque la structure de propriété de l'AVC devient vraie, il faut les montrer en premier, puis l'AVC devient fausse. Y a-t-il un moyen de faire cela en C# LINQ ?
Je veux trier une liste en C#.
Par exemple, lorsque la structure de propriété de l'AVC devient vraie, il faut les montrer en premier, puis l'AVC devient fausse. Y a-t-il un moyen de faire cela en C# LINQ ?
Eh bien, la façon la plus simple d'utiliser LINQ serait quelque chose comme ceci :
list = list.OrderBy(x => x.AVC ? 0 : 1)
.ToList();
ou
list = list.OrderByDescending(x => x.AVC)
.ToList();
I croire que l'ordre naturel de bool
Les valeurs sont false < true
mais la première forme est plus claire, car tout le monde sait que 0 < 1
.
Notez que cela ne triera pas la liste d'origine elle-même - cela créera une nouvelle liste, et assignera la référence à l'objet de la liste. list
variable. Si vous souhaitez effectuer un tri sur place, vous devez utiliser la fonction List<T>.Sort
méthode.
Comme ça ?
Dans LINQ :
var sortedList = originalList.OrderBy(foo => !foo.AVC)
.ToList();
Ou en place :
originalList.Sort((foo1, foo2) => foo2.AVC.CompareTo(foo1.AVC));
Comme le dit Jon Skeet, le truc ici est de savoir que false
est considéré comme "plus petit" que true.
Si vous constatez que vous effectuez ces opérations d'ordonnancement à de nombreux endroits différents dans votre code, il serait bon d'obtenir votre type Foo
pour mettre en œuvre le IComparable<Foo>
et IComparable
interfaces.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.