0

我有一个类型列表List<decimal>

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返回所有列表是否相同

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

谢谢

4

1 回答 1

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;
于 2013-10-12T08:31:58.140 回答