如何确定一个字符串是否包含任何一个字符串列表中的匹配项

16

假设我有一个字符串列表:

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

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

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

我正在尝试使用linq完成此操作,但目前似乎无法完成。

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

有谁可以帮我解决这个问题吗?

7个回答

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

这适用于非常短的字符串列表,但它的可扩展性很差。 - Guffa

12

使用 HashSet 而不是 List,这样你可以查找一个字符串而无需遍历整个列表。

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

现在你可以使用Contains方法来高效地查找匹配项:

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

6
这个能行吗:
listOfStrings.Contains("Trucks");

1
var m = Vehicles.Where(v => listOfStrings.Contains(v.Name));

0

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

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

0

您可以执行内连接

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

0
Vehicles.Where(vehicle => listOfStrings.Contains(vehicle.Name))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接