Ayant un tableau de chaînes, comment puis-je le mettre à jour afin que ses éléments soient sortingés par leur longueur
j’essayais
ssortingng[] arr = {"aa","ss","a","abc"}; arr = arr.OrderBy(aux => aux.Length);
Donc, je voudrais obtenir a,aa,ss,abc
, mais il est dit
ne peut pas implicitement convertir le type ‘system.linq.iorderedenumerable en ssortingng []’
- Ajouter ou Somme des heures comme 13h30 + 00h00: 20 = 13h30: 20 mais comment?
- Comment trouver une ressource dans un UserControl à partir d’une classe DataTemplateSelector dans WPF?
- Suivi du temps passé dans le débogueur
- IPostbackEventHandler VS IPostbackDataHandler
- .NET boxe / unboxing vs performances de casting
Alors je faisais
foreach (ssortingng s in arr.OrderBy(str => str.Length)) { // }
Y a-t-il une autre façon de faire cela?
Puisque arr
est un tableau, vous pouvez utiliser la méthode pratique Array.Sort
:
Array.Sort(arr, (x, y) => x.Length.CompareTo(y.Length)); foreach (ssortingng s in arr) { ... }
Ceci est plus efficace que OrderBy
car il va sortinger les éléments du tableau en place plutôt que de créer une nouvelle collection à énumérer.
OrderBy
renvoie IEnumerable
, pas un tableau. Utilisez la méthode ToArray
pour obtenir un tableau:
arr = arr.OrderBy(aux => aux.Length).ToArray();
Cependant, il ne sortingera pas le tableau source. Au lieu de cela, il en créera un nouveau avec les éléments sortingés et remplacera la référence. Si vous avez besoin d’un sorting sur place (par exemple, lorsque le tableau est également référencé ailleurs), utilisez la méthode Array.Sort
:
Array.Sort(x, (x1, x2) => x1.Length.CompareTo(x2.Length));
Vous pouvez également le faire en utilisant Linq comme ci-dessous:
var sortedElements = from arrElement in arr.Distinct() orderby arrElement.Length select arrElement; foreach (ssortingng element in sortedElements) { ... }