关于如何检查字符串是否包含列表中的任何输入,也有类似的问题,但我对如何为两个字符串列表执行此操作感到困惑。
假设我有一个包含以下内容的第一个列表:
["five", "four", "three", "two", "one"]
并有第二个 List<string>
包含:
["bathroom", "twelve", "thirteen", "fou"]
我想看看列表 2 中的任何“子字符串”是否与列表 1 匹配。如果列表 2 中的任何子字符串在列表 1 中找到(即“fou”),则为真,否则如果没有子串匹配发现它是假的。
我想这会使用 linq,但我不确定如何为两个字符串列表执行此操作。
答案 0 :(得分:1)
var result = list1.Any(s1 => list2.Any(s2 => s1.Contains(s2)));
或者,使用更复杂的语法
var result = list1.Any(s1 => list2.Any(s1.Contains));
答案 1 :(得分:1)
如果您只想拥有 bool result
- 如果 string
内的任何 "fou"
(例如 secondList
)包含在 firstList
内的任何项目中(例如, four
:four) -
你可以试试
List<string> firstList = new List<string>() {
"five", "four", "three", "two", "one",
};
List<string> secondList = new List<string>() {
"bathroom", "twelve", "thirteen", "fou",
};
...
bool result = secondList
.Any(second => firstList.Any(first => first.Contains(second)));
答案 2 :(得分:1)
var list1 = new List<string> { "five", "four", "three", "two", "one" };
var list2 = new List<string> { "bathroom", "twelve", "thirteen", "fou" };
var found = list1.Any(i1 => list2.Any(i2 => i1.Contains(i2)));
编辑
根据您的评论,我了解到您在调试时遇到问题。你可以像下面的例子一样扩展上面的代码,这样它可以帮助你更好地理解代码在做什么:
var list1 = new List<string> { "five", "four", "three", "two", "one" };
var list2 = new List<string> { "f", "o", "t" };
var found = list1.All(i1 =>
{
var l1Result = list2.Any(i2 =>
{
var l2Reuslt = i1.Contains(i2);
Console.WriteLine($"{i1} constains {i2}: {l2Reuslt}");
return l2Reuslt;
});
Console.WriteLine($"{i1} Final : {l1Result}");
return l1Result;
}
);