是否有一些实用程序来检查序列是否包含多个元素而不是重复使用Contains
?
List<string> containter = new List<string>();
for (int i = 0; i < 10; i++)
{
containter.Add("string #" + i);
}
if (containter.Contains("string #2") && //Is it possible to replace this with one call passing two strings to improve efficiency
containter.Contains("string #6"))
{
//Do Something
}
根据更新的问题,我修改了我的答案:
List<string> containter = new List<string>();
for (int i = 0; i < 10; i++)
{
containter.Add("string #" + i);
}
//define a checklist
List<string> checkList = new List<string> { "string #2", "string #6" };
//we're in, if every item in checkList is present in container
if (!checkList.Except(containter).Any())
{
Console.WriteLine("true");
}
您仍然可以使用 Any
.但在这种情况下,使用Except
方法会很好。
如果checkList
中的每个项目都存在于container
则生成的序列将不包含任何元素,因此Any
应返回false
。
我假设您想比较两个序列,并想知道一个序列是否包含另一个序列中的所有元素。
var outer = new List<String>() { "1", "2", "3" };
var inner = new List<String>() { "1", "2" };
bool outerContainsAllInnerElements = inner.TrueForAll(i => outer.Contains(i));
或者,您可以使用 Intersect()
,但当您尝试获取其计数时,这会将您的项目投影到新序列中。如果这是你想要的,那就太好了,但如果你不需要知道哪些元素相交,那么TrueForAll()
会节省开销。
var outer = new List<String>() { "1", "2", "3" };
var inner = new List<String>() { "1", "2" };
var elementsInBoth = outer.Intersect(inner);
bool outerContainsAllInnerElements = (elementsInBoth.Count() == inner.Count());
Any
:
string s = "I am a string";
string[] check = { "is", "my" };
Console.WriteLine(check.Any(x => s.Contains(x))); // False
s = "This is a string";
Console.WriteLine(check.Any(x => s.Contains(x))); // True
s = "my string";
Console.WriteLine(check.Any(x => s.Contains(x))); // True