使用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中做到这一点吗?
您可以使用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));