LINQ를 사용하여 여러 개체 컬렉션의 데카르트 곱 계산
객체 지향 프로그래밍에서는 여러 마리의 개를 소유한 사람, 각 개마다 여러 마리의 강아지를 키우는 등 계층이나 관계를 형성하는 데이터 구조를 접할 수 있습니다. 이러한 종류의 데이터에 대해 특정 작업을 수행하려면 여러 객체 컬렉션의 데카르트 곱을 계산해야 할 수도 있습니다. 이 문서에서는 C#에서 LINQ(Language Integrated Query)를 사용하여 이를 달성하는 방법을 살펴봅니다.
문제 설명
다음 데이터 구조를 고려하세요.
모든 사람은 한 마리 이상의 개를 소유하고 있으며, 모든 개는 한 마리 이상의 강아지를 소유하고 있습니다. 모든 사람에게 속한 모든 개에서 강아지 한 마리를 가져와서 가능한 모든 조합의 목록을 생성한다고 가정해 보겠습니다. 예:
이는 각 개에 속한 강아지 세트의 데카르트 곱을 나타냅니다.
LINQ 기반 솔루션
SQL을 사용하는 경우 개와 강아지가 포함된 테이블을 "곱하여" 데카르트 곱을 계산하는 쿼리를 작성할 수 있습니다. LINQ에서는 다음 단계를 사용하여 비슷한 결과를 얻을 수 있습니다.
1. 데카르트 곱법을 정의합니다
컴파일 시 개 세트 수를 모른다고 가정합니다. 이를 처리하기 위해 집합 컬렉션을 입력으로 받아들이고 가능한 모든 조합을 나타내는 튜플 컬렉션을 반환하는 CartesianProduct<T>
이라는 일반 메서드를 정의할 수 있습니다. 이 접근 방식을 구현하는 방법에 대한 자세한 내용은 원래 질문에 제공된 리소스를 참조하세요.
2. 데카르트 곱 생성
CartesianProduct<T>
메소드가 정의되면 이를 호출하여 각 개에 속한 강아지 세트의 데카르트 곱을 계산할 수 있습니다. 이는 다음 코드를 사용하여 수행할 수 있습니다:
<code class="language-csharp">var combinations = CartesianProduct(from dog in person.Dogs select dog.Puppies);</code>
결과 세트 combinations
에는 가능한 모든 조합을 나타내는 강아지 튜플이 포함됩니다.
위 내용은 LINQ는 여러 개체 집합의 데카르트 곱을 어떻게 계산할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!