我有一个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
列表的方法,这些列表返回所有列表相同或不同的
请给我一些建议,我可以轻松地做到这一点,或者有任何直接的方法来解决这个问题。
感谢
答案 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;