이상적으로는 템플릿화된 논리적 집합 클래스를 찾고 있습니다. 유니온, 교차 등과 같은 모든 표준 집합 연산과 중복된 항목 축소 기능이 있어야 합니다.
결국 C# 사전을 기반으로 키만 사용하는 나만의 집합 클래스를 만들었습니다.
내가 본 가장 멋진 # 39 의 일부분으로 구축현 설정되었습니다 Wintellect& 꾩썝 모음집: http://www.codeplex.com/PowerCollections.
구축현 설정, br /> here:< 찾을 수 있습니다. [http://www.codeplex.com/PowerCollections/SourceControl/FileView.aspx? =, = 6259 itemId 101886& 창스티드] [2] < br />; 이 회사는 올해 모든 설정 작업 (union, 교차될 등).
이를 통해 희망을!
[2]: http://www.codeplex.com/PowerCollections/SourceControl/FileView.aspx =, = 6259 창스티드 101886& itemId?
아니요, 프레임워크에 기본적으로 제공되지 않습니다. 대부분의 프로젝트에서 사용하는 오픈 소스 구현(예: nHibernate)인 Iesi.Collections가 있습니다. 이에 대한 CodeProject 문서를 참조하세요:
public sealed class MathSet<T> : HashSet<T>, IEquatable<MathSet<T>>
{
public override int GetHashCode() => this.Select(elt => elt.GetHashCode()).Sum().GetHashCode();
public bool Equals(MathSet<T> obj) => SetEquals(obj);
public override bool Equals(object obj) => Equals(obj as MathSet<T>);
public static bool operator ==(MathSet<T> a, MathSet<T> b) =>
ReferenceEquals(a, null) ? ReferenceEquals(b, null) : a.Equals(b);
public static bool operator !=(MathSet<T> a, MathSet<T> b) => !(a == b);
}
사용 예시:
var a = new MathSet<int> { 1, 2, 3 };
var b = new MathSet<int> { 3, 2, 1 };
var c = a.Equals(b); // true
var d = new MathSet<MathSet<int>> { a, b }; // contains one element
var e = a == b; // true
이 질문 '는 이 넘는 것으로 지켜보리니 이유에 대해서 외곽진입 하시세'.