적당한 집합
10251 단어 dotnetcsharpcomputerscience
Set<TElement>
을 입력합니다.나는 여전히 공공 API를 100% 확정할 수 없고 전체 프로젝트가 테스트 단계에 있기 때문에 내가 자랑하는 일을 어떻게 하는지에 대해 더 좋은 생각을 가지고 있다면, 내가 그것을 연구할 수 있다는 것을 알려주십시오.우선 인터페이스가 없습니다.반대로 이것은 추상적인 유형입니다. 파생할 수 있지만 라이브러리에 내부 파생이 있습니다. 직접 접근할 수 없지만, 최종적으로 사용할 것입니다.나는 이것이 실천에서 의의가 있다고 보증한다.
이것은 내가 본 집합을 실현하는 전형적인 방식이 아니라 가변적인 데이터 구조가 아니다.반대로 그것은 어떤 원소부터 영원히 존재한다.반대로 당신은 집합 대수를 통해 더욱 복잡한 집합을 만들 수 있으며 집합 대수는 정의가 좋은 공리와 이용할 수 있는 항등식이 있다.하지만 가장 기본적인 장면부터 소개해 드리겠습니다.
readonly Set<Int32> smallPrimes = Set.From(2, 3, 5, 7);
이때 smallPrimes
은 변경할 수 없습니다. 실례는 변할 수 없기 때문에 인용은 readonly
입니다.테스트 집합의 존재성은 간단하면서도 뚜렷하다.Assert.True(smallPrimes.Contains(5));
Assert.False(smallPrimes.Contains(6));
Assert.False(smallPrimes.Contains(11));
그러나 또 다른 간단한 설정이 있다. 우리가 포괄해야 한다!ISet<T>
에서 우리는 한 그룹의 모든 짝수나 홀수, 또는 짝수만을 어떻게 정의할 것인가를 고려해 봅시다!32비트 정수의 표준 짝수 집합은 8589934588바이트의 메모리를 차지합니다!나는 너의 상황을 모르겠지만, 나는 이런 방법을 사용할 수 있는 컴퓨터가 한 대도 없다.나는 마이크로소프트가 아니다. 왜냐하면 그것은 서버장과 분포식 계산 기술에 수백만 달러를 썼기 때문이다.어쩌면 이것이 그들이 무관심한 이유일지도 모른다.🤔readonly Set<Int32> evens = Set.From((x) => x % 2 == 0);
축하합니다. 당신은 지금 짝수가 생겼습니다. 게다가 그것은 당신의 컴퓨터를 폭발시키지 않을 것입니다.다음 그룹도 고려해야 합니다.
readonly Set<Int32> odds = Set.From((x) => x % 2 != 0);
readonly Set<Int32> positive = Set.From(x) => x > 0);
readonly Set<Int32> negative = Set.From(x) => x < 0);
readonly Set<Int32> empty = Set.Empty<Int32>();
readonly Set<Int32> universe = Set.Universe<Int32>();
빈 집합은 명백히 알 수 있다. 그것은 원소가 없는 집합이다.우주는 그리 뚜렷하지는 않지만, 그것은 공집의 찬미이다. 우주는 모든 원소를 포함하는 집합이다.그래, 우리는 모든 숫자, 모든 짝수, 그리고 모든 홀수에 대해 집합을 정의했다. 이 모든 것은 한 줄 코드에 있다.
대수 시간에 항등식이 있었던 것을 기억하십니까?그것들은 보통
0
또는 1
으로 x/x = 1
또는 x-x = 0
또는 x+0 = x
과 같다.전체적으로 보면 수학에 매우 유용하다. 특히 신분이 없는 0
세기에는 문제가 비일비재했다.집합 대수에서 공집과 우주집은 바로 이런 항등식이다.이런 항등식 없이 집합 대수를 시도해 보는 것은 마치 0
과 1
이 없는 상황에서 추상 대수를 시도해 보는 것과 같다.너는 매우 불쾌하게 지낼 것이다.간단한 대수 연산에서 그것들을 사용하자.
readonly Set<Int32> positiveEvens = positive & evens;
여기, 우리는 모든 정수와 모든 짝수 사이의 교집만 했다.그 어떤 음수도 짝수든 홀수든 진정한 존재성을 검증하지 못한다. 설령 그 중의 한 구성집이 사실이라고 해도.이 목적에 사용되는 연산자를 이해할 수 있는 아주 유용한 방법이 있습니다. 두 개의 그룹의 존재성을 테스트할 때 어떤 연산자를 사용하시겠습니까?이런 상황에서, 당신은 '정수 그룹' 과 '짝수 그룹' 을 통해 순환한다. 이 두 그룹이 모두 존재할 때만 집합의 일부분이다.
readonly Set<Int32> oddsWithoutSmallPrimes = odds - smallPrimes;
여기서 우리는 기수집과 모든 소수집 사이의 차이만 만들었다.그러니 위로 굴러갈 필요가 없다. smallPrimes
은 [2, 3, 5, 7]
으로 정의된다.모든 홀수에서 2
을 꺼내는 것은 처음부터 존재하지 않았기 때문이다.나머지는 빼면 테스트 결과가 가짜가 된다.Assert.True(oddsWithoutSmallPrimes.Contains(1));
Assert.False(oddsWithoutSmallPrimes.Contains(2));
Assert.False(oddsWithoutSmallPrimes.Contains(3));
Assert.False(oddsWithoutSmallPrimes.Contains(5));
Assert.False(oddsWithoutSmallPrimes.Contains(7));
Assert.True(oddsWithoutSmallPrimes.Contains(9));
Assert.True(oddsWithoutSmallPrimes.Contains(11));
일리가 있었으면 좋겠어요.전반적으로 다음 컬렉션 작업은 해당 C# 연산자로 정의됩니다.
C#
설정 작업
-
차이점
!
보태다
&
엇갈리다
^
분석하다
|
연합회
마찬가지로 모든 연산자는 자신이 이 연산자를 테스트할 때 실행할 등효 논리 연산자와 대응하도록 선택된다.물론
-
을 제외하고는 추상 대수의 차이다.그렇다면 이 모든 것은 어떻게 작동되는 것일까?이모티콘 트리를 통해이는 LINQ expression trees과는 무관하다는 점을 지적할 만하다.반대로 이것은 실제 데이터 구조로 그 자체가 일종의 다중 트리이다.어떤 텍스트 집합도 수정되지 않지만, 집합 연산자는 표현식을 작성할 때 이 표현식을 나타내는 트리를 구축하고, 이 트리를 새로운 집합으로 되돌려줍니다.처음에는 비싼 것 같았지만, 집합이 얼마나 많은 메모리를 절약했는지 설명하기 위해 의뢰를 사용한 것을 기억하십니까?표현식 트리는 아주 간단한 사용법에만 한정되어 있지만 실제로는 더 많은 절약을 할 수 있다.모든 집합은 변할 수 없기 때문에 우리는 집합을 뛰어넘어 자유롭게 그것들을 다시 사용할 수 있다. 이것은 집합의 임의의 조합이 기존의 실례를 다시 사용해서 더 많은 메모리를 절약할 수 있다는 것을 의미한다.아주 좋아요.
지금 목록, 나무, 혹은 다른 것을 원한다면, 유일한 원소의 예는 무엇입니까?요소가 이미 컬렉션에 있으면 다시 추가할 수 없습니다.나는 너에게 알려줄 소식이 있다.그것은 한 세트가 아니다.기본 시리즈가 무엇이든 간에 이것은 유일무이한 것이다. 이것은 그 자체의 개념이다.둘을 결합시키는 것은
ISet<T>
이 이렇게 복잡하고 불규칙한 추상적인 중요한 원인이다.
Reference
이 문제에 관하여(적당한 집합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/entomy/proper-sets-4p0b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)