比较两个List<T>对象是否相等,忽略顺序还有一个清单-比较问题。List<MyType> list1;List<MyType> list2;我需要检查它们是否具有相同的元素,而不管它们在列表中的位置如何。各MyType对象可能多次出现在列表中。有没有一个内置的函数来检查这个?如果我保证每个元素只在一个列表中出现一次呢?
3 回答
撒科打诨
TA贡献1934条经验 获得超2个赞
Enumerable.SequenceEqual(list1.OrderBy(t => t), list2.OrderBy(t => t))
编辑:
IEquatable
IComparable
:
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);}
编辑2:
public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2, IEqualityComparer<T> comparer) { var cnt = new Dictionary<T, int>(comparer); ...
茅侃侃
TA贡献1842条经验 获得超21个赞
..无论它们在列表中的位置如何,它们都有相同的元素。每个MyType对象可能在列表中出现多次。
// lists should have same count of items, and set difference must be emptyvar areEquivalent = (list1.Count == list2.Count) && !list1.Except(list2).Any();
// check that [(A-B) Union (B-A)] is emptyvar areEquivalent = !list1.Except(list2).Union( list2.Except(list1) ).Any();
Intersect
, Union
, Except
Contains
编辑:
var a = new[] {1, 2, 3, 4, 4, 3, 1, 1, 2};var b = new[] { 4, 3, 2, 3, 1, 1, 1, 4, 2 };// result below should be true, since the two sets are equivalent...var areEquivalent = (a.Count() == b.Count()) && !a.Except(b).Any();
跃然一笑
TA贡献1826条经验 获得超6个赞
var set1 = new HashSet<MyType>(list1);var set2 = new HashSet<MyType>(list2);return set1.SetEquals(set2);
.GetHashCode()
IEquatable<MyType>
MyType
.
- 3 回答
- 0 关注
- 404 浏览
添加回答
举报
0/150
提交
取消