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

本文关键字:字符串 之间 列表 是否 有一个 两个 查找 linq 使用 | 更新日期: 2023-09-27 18:12:18

我有两个字符串列表:

List<string> lotterynumber;
List<string> lotterywinningnumber;

我想看看lotterynumber是否在lotterywinningnumber内。

我现在正在使用foreach循环:

bool b = false;
foreach(string s in lotterynumber)
{
    if(lotterywinningnumber.contains(s))
    {
        b= true;
    }
}

我可以在Linq中做到这一点吗?

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

您可以使用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" }
从MSDN:

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

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

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

bool contains = lotteryNumbers.Intersect(lotteryWinningNumbers).Any();

有一种方法,但效率是一样的:O(n)。

使用任何

bool b = lotterynumber.Any(a => lotterywinningnumber.Contains(a));