如何比较C#中的Guids列表

时间:2014-10-31 15:43:15

标签: c# .net list dictionary comparison

我有这个结构

var values = new Dictionary<int, List<Guid>>();

我必须说明所有词典元素是否都具有相同的List<Guid>

我不需要知道哪些是完全不同的,只是为了回答这个问题。

所以它看起来像

List A { 1, 2, 3} List B { 1, 2, 3} List C { 1, 2, 3}同样没有区别。

List A { 3, 2, 3} List B { 1, 2, 3} List C { 1, 2, 3}不一样。

我不知道我可以从哪里开始。

最初,我猜测会将List<Guid>转换为string并对其进行distinct操作。

但这是一个好方法吗?

谢谢!

2 个答案:

答案 0 :(得分:9)

我从其中一个值(any)创建HashSet<Guid>,然后检查所有其他值是否等于它:

// TODO: Handle the dictionary being empty
var firstSet = new HashSet<Guid>(values.First().Value);
var allEqual = values.All(pair => firstSet.SetEquals(pair.Value));

这假定:

  • 每个列表中的顺序并不重要
  • 每个GUID在列表中出现的次数并不重要

(即你真的认为它们是集合,而不是列表,至少对于这部分代码而言)

换句话说,如果您有guid A和B,则上面的代码假定{A,B,B}等同于{B,A}。

答案 1 :(得分:-1)

SequenceEquals()可能是您正在寻找的内容。将它与IEnumerable.All()结合使用,您可以得到一个布尔答案,无论您的词典中的所有元素是否包含相同的列表。例如:

values.All(list => values.All(list2 => list2.SequenceEquals(list));