【问题标题】:Comparing a List<List<decimal>>比较列表<List<decimal>>
【发布时间】:2013-10-12 05:55:38
【问题描述】:

我有一个List&lt;decimal&gt; 类型的列表

List<List<decimal>> Lili = new List<List<decimal>>();
List<decimal> li1 = new List<decimal>();
List<decimal> li2 = new List<decimal>();
List<decimal> li3 = new List<decimal>();
List<decimal> li4 = new List<decimal>();

li1.Add(1);
li1.Add(2);
li1.Add(3);

li2.Add(1);
li2.Add(2);
li2.Add(3);

li3.Add(1);
li3.Add(2);
li3.Add(3);

li4.Add(1);
li4.Add(2);
li4.Add(3);

Lili.Add(li1);
Lili.Add(li2);
Lili.Add(li3);
Lili.Add(li4);

我想创建一个方法来比较 Lili 的所有列表,返回所有列表是否相同

请给我一些建议,我会很容易地做到这一点,或者有什么直接的方法可以解决这个问题

谢谢

【问题讨论】:

  • 每个列表的顺序重要吗?如果列表列表为空,您希望它返回什么?
  • 列表的顺序无关紧要,没有列表是空的
  • 我想返回所有列表是否相等
  • 如果顺序无关紧要,那么你应该考虑使用集合来代替......事实上,你需要考虑 { 1, 2, 3 } 是否等于 { 1, 2, 3, 3}。我在问如果列表列表为空,您希望结果是什么。
  • 我怎么能使用我没有得到正确的套装

标签: c# list compare ienumerable


【解决方案1】:

由于您不关心内部列表中元素的顺序,您应该使用 HashSet。

所以

List<HashSet<decimal>> lili = new List<HashSet<decimal>>();
HashSet<decimal> li1 = new HashSet<decimal>();
…
li1.Add(1);

那么测试两个HashSet是否有相同的元素就像

first.IsSupersetOf(second) && first.IsSubsetOf(second)

现在我们可以用两个 HashSet 检查它们是否相同。如果是这样,只需用一个副本替换两个哈希集,否则忘记列表(用null 替换它们)。我们重复这一点,直到我们只剩下一个项目。如果它是非空的,它们都一样:

using System.Linq;
lili.Aggregate((first, second) => (first != null && second != null && first.IsSupersetOf(second) && first.IsSubsetOf(second))
                              ? first : null) != null;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多