我有两个字符串列表:
List<string> lotterynumber;
List<string> lotterywinningnumber;
我想看看lotterynumber
是否在lotterywinningnumber
内。
我现在正在使用foreach
循环:
bool b = false;
foreach(string s in lotterynumber)
{
if(lotterywinningnumber.contains(s))
{
b= true;
}
}
我有没有办法在Linq中做到这一点?
答案 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));