2010-07-23 10 views
2

Les deux listes sont commeComment comparer deux <String> Liste LINQ en C#

  LISTONE "ONE", "TWO", "THREE" 
      LISTTWO "ONE", "TWO", "THREE" 

je dois comparer les si les éléments de deux listes sont en ordre ou non.

Est-il possible de le faire dans LINQ

+2

double possible de [deux tableaux de chaînes examen d'équivalence] (http://stackoverflow.com/questions/3250887/examen-deux-chaîne-réseaux-pour-équivalence) –

+0

L'opérateur SequenceEqual (méthode d'extension) semble comme ce que vous voulez, à moins LISTONE est autorisé à avoir des éléments qui ne sont pas ListTwo ou vice versa. –

+0

double possible de [Y at-il une méthode intégrée pour comparer les collections en C#?] (Http://stackoverflow.com/questions/43500/is-there-a-built-in-method-to-compare-collections- en c) – nawfal

Répondre

8

Peut-être:

bool equal = collection1.SequenceEqual(collection2); 

Voir aussi: Comparing two collections for equality irrespective of the order of items in them

+0

les appels de 'OrderBy' signifierait que l'ordre a été ignoré: mais Pramodh veut voir si elles sont dans le même ordre –

+0

ouais désolé, je ne sais pas pourquoi je mets d'abord ceux là :) +1 –

+0

Un bon conseil - merci - vous m'avez sauvé d'écrire un code terrible et terrible! – adrianos

0
List<string> list1; 
List<string> list2; 

bool sameOrder = list1.SequenceEqual(list2); 
2

Déterminer si les deux listes contiennent les mêmes données en même ordre:

bool result = list1.SequenceEqual(list2); 

entrées identiques dans un ordre différent:

bool result = list1.Intersect(list2).Count() == list1.Count; 
+0

Attention à la deuxième version. La méthode 'Intersect' utilise une intersection définie, de sorte que vous puissiez obtenir des résultats inattendus si l'une ou les deux listes contiennent des doublons. – LukeH

+0

Bon point. Merci! –

0

Ce sont les réponses correctes, mais comme une pensée, si vous connaissez les listes ont les mêmes données, mais peut-être dans un ordre différent, pourquoi ne pas trier les listes de garantie le même ordre.

var newList = LISTONE.OrderBy(x=>x.[sequence]).ToList(); 
1

Si vous savez qu'il ne peut y avoir des doublons:

bool result = a.All(item => a.IndexOf(item) == b.IndexOf(item)); 

Sinon

bool result = a.SequenceEquals(b)