적어도 나는 그렇게 믿지 않았을 것입니다. 컬렉션 평등은 아마도 사용자 정의 동작 때문일 수 있습니다.
컬렉션의 요소는 순서가 자연 스럽지만 특정 순서가 아니어야합니다. 비교 알고리즘이 의존하는 것은 아닙니다. 두 가지 컬렉션이 있다고 가정 해보십시오.
{1, 2, 3, 4}
{4, 3, 2, 1}
그들은 평등합니까? 당신은 알아야하지만 당신의 관점이 무엇인지 모르겠습니다.
알고리즘이 정렬 규칙을 제공 할 때까지 콜렉션은 기본적으로 개념적으로 정렬되지 않습니다. 페이지 매김을 시도 할 때 SQL Server가주의를 기울이는 것과 마찬가지로 정렬 규칙을 제공해야합니다.
https://docs.microsoft.com/en-US/sql/t-sql/queries/select-order-by-clause-transact-sql?view=sql-server-2017
또 다른 두 컬렉션 :
{1, 2, 3, 4}
{1, 1, 1, 2, 2, 3, 4}
다시, 그들은 평등합니까? 당신은 저에게 말해 ..
컬렉션의 요소 반복성은 다른 시나리오에서 그 역할을하며 일부 컬렉션 Dictionary<TKey, TValue>
은 반복되는 요소를 허용하지 않습니다.
나는 이러한 종류의 평등이 응용 프로그램 정의이며 따라서 프레임 워크가 가능한 모든 구현을 제공하지는 않았다고 생각합니다.
일반적으로 Enumerable.SequenceEqual
충분하지만 다음과 같은 경우에는 false를 반환합니다.
var a = new Dictionary<String, int> { { "2", 2 }, { "1", 1 }, };
var b = new Dictionary<String, int> { { "1", 1 }, { "2", 2 }, };
Debug.Print("{0}", a.SequenceEqual(b)); // false
나는 이것과 같은 질문에 대한 답변 (당신은 그들을 위해 구글 일 수도 있음)과 내가 일반적으로 사용할 것을 읽었다 :
public static class CollectionExtensions {
public static bool Represents<T>(this IEnumerable<T> first, IEnumerable<T> second) {
if(object.ReferenceEquals(first, second)) {
return true;
}
if(first is IOrderedEnumerable<T> && second is IOrderedEnumerable<T>) {
return Enumerable.SequenceEqual(first, second);
}
if(first is ICollection<T> && second is ICollection<T>) {
if(first.Count()!=second.Count()) {
return false;
}
}
first=first.OrderBy(x => x.GetHashCode());
second=second.OrderBy(x => x.GetHashCode());
return CollectionExtensions.Represents(first, second);
}
}
즉, 하나의 컬렉션은 원래 순서를 고려하지 않고 반복되는 시간을 포함하여 요소에서 다른 컬렉션을 나타냅니다. 구현에 대한 몇 가지 참고 사항 :
IList
? 질문이 모호합니다.