清单A:
1, 2, 3, 4
Run Code Online (Sandbox Code Playgroud)
清单B:
2, 5
Run Code Online (Sandbox Code Playgroud)
如何检查列表A是否包含列表B中的任何值?
例如A.contains(a => a.id = B.id)?
Jus*_*ner 92
如果您不关心性能,可以尝试:
a.Any(item => b.Contains(item))
// or, as in the column using a method group
a.Any(b.Contains)
Run Code Online (Sandbox Code Playgroud)
但我先试试这个:
a.Intersect(b).Any()
Run Code Online (Sandbox Code Playgroud)
rad*_*byx 24
我已经介绍了Justins的两个解决方案.a.Any(a => b.Contains(a))是最快的.
using System;
using System.Collections.Generic;
using System.Linq;
namespace AnswersOnSO
{
public class Class1
{
public static void Main(string []args)
{
// How to check if list A contains any value from list B?
// e.g. something like A.contains(a=>a.id = B.id)?
var a = new List<int> {1,2,3,4};
var b = new List<int> {2,5};
var times = 10000000;
DateTime dtAny = DateTime.Now;
for (var i = 0; i < times; i++)
{
var aContainsBElements = a.Any(b.Contains);
}
var timeAny = (DateTime.Now - dtAny).TotalSeconds;
DateTime dtIntersect = DateTime.Now;
for (var i = 0; i < times; i++)
{
var aContainsBElements = a.Intersect(b).Any();
}
var timeIntersect = (DateTime.Now - dtIntersect).TotalSeconds;
// timeAny: 1.1470656 secs
// timeIn.: 3.1431798 secs
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 9
要获得更快、更短的解决方案,您可以使用HashSet代替List.
a.Overlaps(b);
Run Code Online (Sandbox Code Playgroud)
此方法是 O(n) 而不是具有两个列表的 O(n^2)。
小智 5
您可以使用此检查列表是否在另一个列表中
var list1 = new List<int> { 1, 2, 3, 4, 6 };
var list2 = new List<int> { 2, 3 };
bool a = list1.Any(c => list2.Contains(c));
Run Code Online (Sandbox Code Playgroud)