如何比较C#中的Guid列表

本文关键字:中的 Guid 列表 比较 何比较 | 更新日期: 2023-09-27 18:28:33

我有这个结构

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

我不得不说,如果所有字典元素都有相同的List<Guid>集。

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

所以看起来像

CCD_ 2相同且无差异。

CCD_ 3不相同。

我不知道从哪里开始。

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

但这是一个好方法吗?

谢谢!

如何比较C#中的Guid列表

我会从其中一个值(任意)创建一个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}。

SequenceEquals()可能就是您想要的。将它与IEnumerable.All()结合起来,您可以得到一个布尔答案,即字典中的所有元素是否都包含相同的Lists。例如:

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