使用 linq 查找两个字符串列表之间是否存在公共字符串

Cod*_*nja 0 c# linq

我有两个字符串列表:

List<string> lotterynumber;
List<string> lotterywinningnumber;
Run Code Online (Sandbox Code Playgroud)

我想看看 a 是否lotterynumberlotterywinningnumber.

foreach我现在正在使用循环:

bool b = false;
foreach(string s in lotterynumber)
{
    if(lotterywinningnumber.contains(s))
    {
        b= true;
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么办法可以在 Linq 中做到这一点吗?

joh*_*ose 5

您可以使用Enumerable.Intersect来完成此操作。它将返回一个新的 Enumerable,其中包含两个集合中都存在的项目。

var lotteryNumbers = new List<string>() { "1", "2", "3" };
var lotteryWinningNumbers = new List<string>() { "2", "3", "5" };
var numbersInBoth = lotteryNumbers.Intersect(lotteryWinningNumbers); // { "2", "3" }
Run Code Online (Sandbox Code Playgroud)

来自 MSDN:

两个集合 A 和 B 的交集被定义为包含 A 中也出现在 B 中的所有元素但不包含其他元素的集合。当枚举此方法返回的对象时,Intersect 首先进行枚举,收集该序列的所有不同元素。然后它枚举第二个,标记在两个序列中出现的那些元素。最后,标记的元素按照它们被收集的顺序生成。

using 的好处Intersect是它将返回两个集合中都存在的值,而不仅仅是布尔值。

显然,如果您需要布尔值,您只需检查结果集合是否包含任何元素:

bool contains = lotteryNumbers.Intersect(lotteryWinningNumbers).Any();
Run Code Online (Sandbox Code Playgroud)