【问题标题】:Compare two int lists比较两个 int 列表
【发布时间】:2013-09-22 12:15:16
【问题描述】:

我有一个看起来像这样的对象:

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 列表检查这些整数列表并提取相等的 TestObject。换句话说,在此示例中,list1 将在位置 0 的对象中找到命中,list4 将在位置 2 中找到命中,list3 没有命中,因为位置 4 只有部分命中,而 list2 没有命中因为它不存在。

我首先想到的是可以用“Except”来完成。那么,如果在 n 位置的 listN 和 listTest 之间没有任何内容,那么这就是命中?问题是如何将 listN 与 listTest 中位置 N 的对象中的列表进行比较??

【问题讨论】:

  • 使用列表类的equals运算符来测试是否相等如何?
  • @Clearwater:检查引用相等,而不是值相等
  • 谢谢大家。是的,我已经尝试过了,埃里克是对的。它不起作用,因为它只检查引用相等性。 SequenceEqual 也不起作用。

标签: c# linq list int


【解决方案1】:

如果您关心列表中项目的顺序,那么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));

【讨论】:

    【解决方案2】:
    listTest.Where(lt => lt.Ids.SequenceEqual(someOtherList))
    

    【讨论】:

      猜你喜欢
      • 2011-06-19
      • 1970-01-01
      • 2011-02-15
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多