목록 비교
이 문서에서는 두 List
초기계획
정확한 동일성을 보장하려면, 즉 두 목록에 동일한 요소와 빈도가 포함되어 있으므로 비교하기 전에 목록을 정렬하는 것이 좋습니다.
<code class="language-C#">Enumerable.SequenceEqual(list1.OrderBy(t => t), list2.OrderBy(t => t))</code>
최적화 계획
그러나 성능을 향상시키기 위해 누군가 다른 솔루션을 제안했습니다.
<code class="language-C#">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>
이 방법의 성능은 초기 솔루션보다 훨씬 우수합니다. IEquatable
인터페이스가 필요하지 않고 IComparable
인터페이스만 필요합니다.
다양한 데이터 유형 처리
다양한 데이터 유형(null 허용 유형 포함)을 키로 포함하는 상황에 적응하기 위해 향상된 솔루션을 사용할 수 있습니다.
<code class="language-C#">public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2, IEqualityComparer<T> comparer) { var cnt = new Dictionary<T, int>(comparer); ... }</code>
위 내용은 순서를 무시하고 중복을 허용하여 두 목록의 동등성을 효율적으로 비교하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!