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

时间:2015-09-11 17:46:15

标签: c# linq

我有两个字符串列表:

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

我想看看lotterynumber是否在lotterywinningnumber内。

我现在正在使用foreach循环:

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

我有没有办法在Linq中做到这一点?

2 个答案:

答案 0 :(得分:3)

您可以使用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();

答案 1 :(得分:2)

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

使用任何

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