2011-03-23 138 views
14

嗨列表中的任何比赛说我有一个字符串列表:如何确定一个字符串包含字符串

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

,我有其中有一个名称字段一辆选项。

我想查找名称与listOfStrings中某个项目匹配的车辆。

我试图用linq做到这一点,但目前似乎无法完成它。

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

有人能帮助我吗?

回答

13
Vehicles.Where(v => listOfStrings.Contains(v.Name)) 
+0

这适用于非常短的字符串列表,但它的缩放比例很差。 – Guffa 2011-03-23 22:46:13

0

您可以执行Inner Join

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

将这项工作:

listOfStrings.Contains("Trucks"); 
10

使用HashSet一个List代替,这样你可以找一个字符串,而不必遍历列表。

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

现在你可以使用Contains方法能够有效地查找匹配:

var matchingVehicles = Vehicles.Where(v => setOfStrings.Contains(v.Name)); 
1
var m = Vehicles.Where(v => listOfStrings.Contains(v.Name)); 
0
Vehicles.Where(vehicle => listOfStrings.Contains(vehicle.Name)) 
0

要检查字符串中包含这些字符之一(布尔输出):

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

return bool值,它需要字符串或变量。

string country = "southindia"; 
string cou = "india"; 
if (country.Contains(cou)) 
{ 
Console.WriteLine(country); 
} 
else 
{ 
Console.WriteLine(cou); 
} 
相关问题