Maintenir l'ordre des éléments dans LINQ
En programmation, le traitement des données ordonnées est un scénario courant. Lors de la manipulation de tableaux à l'aide de LINQ to Objects, il est important de comprendre quelles opérations préservent l'ordre des éléments pour éviter des modifications accidentelles.
Opérations qui maintiennent l'ordre
Les opérations LINQ suivantes conservent l'ordre d'origine des éléments du tableau :
-
AsEnumerable : Convertit un IEnumerable en un IEnumerable non générique.
-
Cast : Convertissez les éléments en un type différent sans modifier l'ordre.
-
Concat : Combine deux séquences ou plus, en préservant l'ordre de chaque séquence.
-
Sélectionner : Projette chaque élément sur une nouvelle valeur mais conserve l'ordre.
-
ToArray : Matérialise un IEnumerable dans un tableau, en préservant l'ordre.
-
ToList : Matérialise un IEnumerable dans une liste, en conservant l'ordre d'origine.
Quelques opérations qui maintiennent l'ordre
Certaines opérations LINQ filtrent ou ajoutent des éléments sans réorganiser les éléments restants :
-
Distinct : Supprimez les éléments en double (en fonction du comparateur d'égalité). (voir description ci-dessous)
-
Sauf : Renvoie les éléments introuvables dans la séquence spécifiée, en préservant l'ordre de la séquence d'origine.
-
Intersect : Renvoie les éléments trouvés dans les deux séquences, en préservant l'ordre de la première séquence.
-
OfType : Filtrer les éléments d'un type spécifique, en préservant l'ordre.
-
Prepend (nouveau dans .NET 4.7.1) : Ajoute un élément au début de la séquence.
-
Sauter : Saute le nombre spécifié d'éléments au début de la séquence, en préservant l'ordre des éléments restants.
-
SkipWhile : Ignore les éléments jusqu'à ce que le prédicat devienne faux, en préservant l'ordre des éléments restants.
-
Take : Renvoie le nombre spécifié d'éléments au début de la séquence, en préservant l'ordre.
-
TakeWhile : Renvoie les éléments jusqu'à ce que le prédicat devienne faux, en préservant l'ordre.
-
Où : Filtre les éléments en fonction d'un prédicat, en préservant l'ordre des éléments correspondants.
-
Zip (nouveau dans .NET 4) : Associe les éléments de deux séquences, en préservant l'ordre de chaque séquence.
Opérations qui détruisent l'ordre
Les opérations LINQ suivantes ne préservent pas l'ordre d'origine des éléments :
-
ToDictionary : Convertit une séquence en dictionnaire. Les dictionnaires ne maintiennent pas l'ordre.
-
ToLookup : Semblable à ToDictionary, l'ordre n'est pas conservé.
Redéfinir l'ordre des opérations
Ces opérations LINQ modifient explicitement l'ordre des résultats :
- OrderBy: Triez l'élément en fonction de l'élément en fonction du sélectionneur de clés.
OrderByDescending: - Triez l'élément en fonction du sélectionneur de commandes en fonction du sélectionneur de clés.
Inversion:
L'ordre des éléments d'inversion. -
alors par: lié à OrderBy ou OrderByDesmenting, triez par la deuxième clé.
- thereByDescending: lié à OrderBy ou OrderByDescending, trié par la deuxième clé.
- circonstances spéciales
groupby: L'ordre de l'objet de groupe est basé sur l'ordre du premier élément de chaque groupe. Les éléments du groupe sont retournés dans l'ordre de sa séquence source.
groupjoin:
L'ordre de l'élément dans la séquence externe et l'ordre des éléments correspondants dans la séquence interne de chaque élément externe.
- join: Similaire à GroupJoin, conservez l'ordre des éléments dans la séquence externe et correspondant à la séquence interne.
selectmany: - L'ordre est déterminé par l'ordre de l'élément source et la séquence renvoyée par la fonction de sélecteur.
Union:
Les éléments de deux séquences sont générés dans leur ordre d'origine et ne sont pas répétés. -
Explication:
-
Sur la base de la mise en œuvre de .NET, la distribution a été déplacée dans la catégorie "Ordre maintenue".
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!