我有一个看起来像这样的对象:
public class TestObject {
private string name = string.Empty;
private List<int> ids;
public TestObject(List<int> ids, string name)
{
this.ids = ids;
this.name = name;
}
public string Name
{
get { return name; }
set { name = value; }
}
public List<int> Ids
{
get { return ids; }
set { ids = value; }
}
}
我得到一个这样的对象列表,如下所示:
List<TestObject> listTest = new List<TestObject>();
listTest.Add(new TestObject((new int[] { 0, 1, 5 }).ToList(), "Test1"));
listTest.Add(new TestObject((new int[] { 10, 35, 15 }).ToList(), "Test2"));
listTest.Add(new TestObject((new int[] { 55 }).ToList(), "Test3"));
listTest.Add(new TestObject((new int[] { 44 }).ToList(), "Test4"));
listTest.Add(new TestObject((new int[] { 7, 17 }).ToList(), "Test5"));
然后我有几个整数列表如下:
List<int> list1 = new List<int>();
list1.Add(0);
list1.Add(1);
list1.Add(5);
List<int> list2 = new List<int>();
list2.Add(4);
List<int> list3 = new List<int>();
list3.Add(7);
List<int> list4 = new List<int>();
list4.Add(55);
我想要做的是能够针对TestObject列表检查这些整数列表并提取相同的TestObjects。换句话说,在这个例子中,list1会在位置0的对象中找到一个命中,list4会在位置2找到一个命中,list3没有命中,因为在位置4中只有一个部分,而list2没有命中因为它不存在。
我首先想到的可以用“除外”来完成。那么,如果listN和listTest之间没有任何东西,那么那就是命中?问题是如何将listN与listTest中位置N的对象中的列表进行比较?
答案 0 :(得分:5)
如果您关心列表中项目的顺序,那么spender's解决方案就是一个很好的解决方案。
但是,如果商品的顺序无关紧要(例如{5, 1, 0}
应与{0, 1, 5}
匹配),您可以使用以下内容:
listTest.Where(t => t.Ids.Count == list4.Count && !t.Ids.Except(list4).Any());
甚至更好:
var list4Hash = new HashSet(list4);
listTest.Where(t => list4Hash.SetEquals(t.Ids));
答案 1 :(得分:1)
listTest.Where(lt => lt.Ids.SequenceEqual(someOtherList))