C#中比较List
在比较两个List
如果元素顺序无关紧要,则在比较之前对两个列表进行排序是一种直接的方法。这可以使用以下代码实现:
<code class="language-csharp">Enumerable.SequenceEqual(list1.OrderBy(t => t), list2.OrderBy(t => t))</code>
或者,为了提高性能并与实现IEquatable
<code class="language-csharp">public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2) { var cnt = new Dictionary<T, int>(); foreach (T s in list1) { if (cnt.ContainsKey(s)) { cnt[s]++; } else { cnt.Add(s, 1); } } foreach (T s in list2) { if (cnt.ContainsKey(s)) { cnt[s]--; } else { return false; } } return cnt.Values.All(c => c == 0); }</code>
如果用作键的数据类型默认情况下不支持相等性比较,则可以使用上面函数的另一个版本,该版本将相等性比较器作为参数:
<code class="language-csharp">public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2, IEqualityComparer<T> comparer) { var cnt = new Dictionary<T, int>(comparer); //其余代码保持不变 }</code>
以上是如何在 C# 中有效比较两个列表对象的内容相等性?的详细内容。更多信息请关注PHP中文网其他相关文章!