比较List <list <decimal>&gt; </list <decimal>

时间:2013-10-12 05:55:39

标签: c# list compare ienumerable

我有一个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列表的方法,这些列表返回所有列表相同或不同的

请给我一些建议,我可以轻松地做到这一点,或者有任何直接的方法来解决这个问题。

感谢

1 个答案:

答案 0 :(得分:1)

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

所以

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

然后测试两个HashSets是否具有相同的元素就像

一样简单
first.IsSupersetOf(second) && first.IsSubsetOf(second)

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

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