Ma liste ressemble à: List. >
Je dois vérifier si l'une des premières valeurs de la liste imbriquée est égale à certaines valeurs.
C'est ce que j'ai fait et ça marche:
if (myList.Any(sb =>
sb.First() == "Value1" ||
sb.First() == "Value2" ||
sb.First() == "Value3" ||
sb.First() == "Value4"))
Je me demandais s'il y avait un moyen de faire la requête de manière à ne pas répéter le sb. Premier () ?
Ma manière de mettre en œuvre a-t-elle une influence sur les performances?
4 Réponses :
Vous pouvez d'abord créer un HashSet pour contenir les valeurs:
if (myList.Any(sb => container.Contains(sb.First()))){...}
, puis l'utiliser comme:
var container = new HashSet<string> {"Value1", "Value2", "Value3", "Value4"};
Vous pouvez avoir un tableau de valeurs et vérifier s'il contient tout ce qui se trouve dans sb.First () , comme ceci:
if (myList.Any(sb =>
new HashSet<string> {"Value1", "Value2", "Value3", "Value4"}.IndexOf(sb.First()) > -1)
Que diriez-vous: nouvelle chaîne [] -> HashSet?
Ouais, un jeu de hachage pourrait être mieux.
Si vous envisagez d'utiliser un ensemble de hachage, vous feriez mieux d'accepter l'une des réponses qui le suggèrent au lieu de ma suggestion pour un tableau ...
var matches = new HashSet<string>() { "Value1", "Value2", "Value3", "Value4" };
myList.Select(sb => sb.FirstOrDefault()).
Any(st => matches.Contains(st));
Should do it, using a HashSet to improve string comparisons.
Vous pouvez également faire ceci:
if (l.Any(x =>
{
var sb = x.First();
return sb == "Value1" ||
sb == "Value2" ||
sb == "Value3" ||
sb == "Value4";
}))
{
// true
}
Créez un tableau de toutes les valeurs possibles, c'est-à-dire
var array = new [] {"Value1", "Value2", "Value3", "Value4"}, puis vérifiezif (myList.Any ( sb => array.Contains (sb.First ()))?Si
maListeest de typeIList , il appellera simplementsb [0] == "Value1", etc.