是否有相当于散装的包含



是否有一些实用程序来检查序列是否包含多个元素而不是重复使用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

相关内容

  • 没有找到相关文章

最新更新