我有int A,B的列表.我想在linq中执行以下步骤
list<int> c = new List<int>();
for (int i = 0; i < a.count; i++)
{
for (int j = 0; j < b.count; j++)
{
if (a[i] == b[j])
{
c.add(a[i]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果它的a和b是object
,我需要检查这种方式的特定属性并添加列表如果它等于我怎么能在linq中这样做?
Fem*_*ref 64
你可以使用这个Intersect
方法:
var c = a.Intersect(b);
Run Code Online (Sandbox Code Playgroud)
这将返回a和b中的所有值.但是,不考虑列表中项目的位置.
Kla*_*sen 14
您可以使用Intersect:
var a = new List<int>();
var b = new List<int>();
var c = a.Intersect(b);
Run Code Online (Sandbox Code Playgroud)
生成一个列表,c
其中包含出现在两个列表a
和中的所有元素b
:
List<int> c = a.Intersect(b).ToList();
Run Code Online (Sandbox Code Playgroud)
LINQ等效代码是:
var c = from i in Enumerable.Range(0, a.Count)
from j in Enumerable.Range(0, b.Count)
where a[i] == b[j]
select a[i];
var cList = c.ToList();
Run Code Online (Sandbox Code Playgroud)
但这样做更好:
var c = from aItem in a
join bItem in b on aItem equals bItem
select aItem;
var cList = c.ToList();
Run Code Online (Sandbox Code Playgroud)
但这不会过滤重复项.要完全过滤重复项,您可以执行以下操作:
var cList = a.Intersect(b).ToList();
Run Code Online (Sandbox Code Playgroud)
如果您希望重复项显示次数b
,例如:
var aSet = new HashSet<int>(a);
var cList = b.Where(aSet.Contains)
.ToList();
Run Code Online (Sandbox Code Playgroud)