假设我有2 List<T>
List1和List2,如下所示:
列表1 :
[ID:1, Name:"item1"]
[ID:2, Name:"item2"]
[ID:3, Name:"item3"]
[ID:4, Name:"item4"]
列表2:
[ID:2, Name:"item2"]
[ID:3, Name:"item3"]
[ID:5, Name:"item5"]
[ID:6, Name:"item6"]
如何获取仅包含两个列表中对象的列表?使用上面的例子,我想返回:
[ID:2, Name:"item2"]
[ID:3, Name:"item3"]
修改原始列表即可。最好的方法是什么?
答案 0 :(得分:6)
var result = list1.Intersect(list2).ToList();
最简洁。但请记住,它使用的默认相等比较器可能适用于您,也可能不适合您。如果没有,您可以提供自己的:
public class MyEqualityComparer : IEqualityComparer<Foo>
{
public bool Equals(Foo x, Foo y)
{
return x.Id == y.Id;
}
public int GetHashCode(Foo obj)
{
return obj.Id.GetHashCode();
}
}
var result = list1.Intersect(list2, new MyEqualityComparer()).ToList();
答案 1 :(得分:4)
如果列表中没有重复项,您可以执行此操作:
var combinedList = list2.Intersect(list1).ToList();
修改强>
正如@Matt Greer指出的那样,你需要一个自定义的相等比较器才能正常工作。
答案 2 :(得分:1)
和jQuery一样,答案总是LINQ!
var intersection = list1.Where(item => list2.Contains(item)).ToList();
假设列表包含实际引用的副本。如果没有,那么请执行:
var intersection = list1.Where(item => list2.Count(match => item.ID == match.ID && item.Name == match.Name) > 0).ToList();
答案 3 :(得分:-1)
在这里使用lua代码:
ArrayList1={}
ArrayList2={}
function inTable(tbl,val)
for _,v in ipairs(tbl) do
if v==val then return true end
end
return false
end
function getSame(tbl1,tbl2)
returnArray={}
for _,v in ipairs(tbl1) do
if inTable(tbl2,v) then table.insert(returnArray,v) end
end
end
newArray=getSame(arrayList1,arrayList2)
我对C#不太熟悉。