我的列表看起来像:List<List<string>>
。
我需要检查嵌套列表的第一个值是否等于某些值。
这就是我所做的并且有效:
if (myList.Any(sb =>
sb.First() == "Value1" ||
sb.First() == "Value2" ||
sb.First() == "Value3" ||
sb.First() == "Value4"))
我想知道是否有一种方法可以不重复sb.First()
进行查询?
我的实施方式会影响绩效吗?
答案 0 :(得分:1)
您可以首先创建一个HashSet
来包含值:
var container = new HashSet<string> {"Value1", "Value2", "Value3", "Value4"};
,然后将其用作:
if (myList.Any(sb => container.Contains(sb.First()))){...}
答案 1 :(得分:1)
您可以有一个值数组,并检查它是否包含sb.First()
中的内容,像这样:
if (myList.Any(sb =>
new HashSet<string> {"Value1", "Value2", "Value3", "Value4"}.IndexOf(sb.First()) > -1)
答案 2 :(得分:1)
var matches = new HashSet<string>() { "Value1", "Value2", "Value3", "Value4" };
myList.Select(sb => sb.FirstOrDefault()).
Any(st => matches.Contains(st));
应该使用HashSet来改善字符串比较。
答案 3 :(得分:1)
您也可以这样做:
if (l.Any(x =>
{
var sb = x.First();
return sb == "Value1" ||
sb == "Value2" ||
sb == "Value3" ||
sb == "Value4";
}))
{
// true
}