web-dev-qa-db-fra.com

Comment déterminer si une chaîne contient des correspondances d'une liste de chaînes

Salut disons que j'ai une liste de chaînes:

var listOfStrings = new List<string>{"Cars", "Trucks", "Boats"};

et j'ai une option de véhicules qui a un champ Nom.

Je souhaite rechercher les véhicules dont le nom correspond à l'un des éléments de la liste de chaînes.

J'essaie de faire cela avec linq mais n'arrive pas à le terminer pour le moment.

var matchingVehicles = Vehicles.Where(v => v.Name == one of the listOfStringItem)

Quelqu'un peut-il m'aider avec ça?

15
Coder 2
Vehicles.Where(v => listOfStrings.Contains(v.Name))
13
Daniel A. White

Utilisez une HashSet au lieu d'une List. Ainsi, vous pourrez rechercher une chaîne sans devoir parcourir la liste en boucle.

var setOfStrings = new HashSet<string> {"Cars", "Trucks", "Boats"};

Vous pouvez maintenant utiliser la méthode Contains pour rechercher efficacement une correspondance:

var matchingVehicles = Vehicles.Where(v => setOfStrings.Contains(v.Name));
12
Guffa

cela fonctionnerait-il:

listOfStrings.Contains("Trucks");
6
Rob
var m = Vehicles.Where(v => listOfStrings.Contains(v.Name));
1
Richard Schneider

Vous pouvez effectuer un Inner Join :

var matchingVehicles = from vehicle in vehicles
                       join item in listOfStrings on vehicle.Name equals item
                       select vehicle;
0
dtb

Pour vérifier si une chaîne contient l'un de ces caractères (sortie booléenne): 

var str= "string to test";
var chr= new HashSet<char>{',', '&', '.', '`', '*', '$', '@', '?', '!', '-', '_'};
bool test = str.Any(c => chr.Contains(c));
0
QHNPROF
Vehicles.Where(vehicle => listOfStrings.Contains(vehicle.Name))
0
WorldIsRound