2010-10-07 6 views
1

J'ai une situation où j'ai une liste d'ID tels que {1,2,3,4}. Je dois passer dans une méthode une autre liste d'identifiants et si la liste contient les mêmes nombres, renvoyer vrai, sinon si l'une ou l'autre liste n'est pas identique (sans tenir compte de l'ordre), je dois retourner false. Ainsi, un appel à la méthode avec {1,2,3,4,5} doit renvoyer false alors qu'un appel avec {2,4,1,3} renvoie true. Cela semble assez simple mais je n'arrive pas à comprendre comment le faire.comment créer cette requête linq

Répondre

0

Si vous êtes assuré de ne pas avoir des éléments répétitifs dans idList, vous pouvez utiliser les éléments suivants:

if (idList.Count == otherIDList.Count && 
    idList.Intersect(otherIDList).Count() == idList.Count) 
{ 
    // Contain same things. 
} 
else 
{ 
    // Do not contain same things. 
} 

Le premier chèque est de vous assurer qu'ils sont de la même taille. C'est un moyen vraiment bon marché de voir si les listes ont même une chance d'être identiques, comme avec les chaînes. Aussi, sans cela, l'instruction retournera vrai si otherIDList est un surensemble de idList.

Si vous ne pouvez pas garantir l'unicité de la collection, je pense que vous devrez coder quelque chose vous-même.

+0

Merci. Je pensais à la méthode de l'intersection, mais je ne me souvenais pas de ce qu'on l'appelait. Merci encore! –

2

La voie est plus simple sans doute ceci:

var idSet = new HashSet<int>(idList1); 
if (idSet.SetEquals(idList2)) 
{ 
    ... 
} 

Selon les commentaires, ce ne tiendra compte {1, 1, 1, 1, 1} égale à {1} - en d'autres termes, il le traite comme un ensemble au lieu d'une collection non ordonnée de valeurs éventuellement dupliquées.

+0

Un rappel que LINQ n'est pas une solution miracle pour travailler avec des collections. –

+0

J'ajouterais une mise en garde que cela ne fonctionnera pas si la liste a des éléments répétitifs. Il est indiqué que ce sont des pièces d'identité dans la question, et pourraient donc supposer qu'ils ne se répètent pas. Mais ce n'est pas déclaré explicitement. – jdmichal

+0

@jdmichal: Vrai. Je mettrai à jour pour le mentionner. –

Questions connexes