LINQ를 사용하여 가변 개수의 세트로 데카르트 곱 구현
클래스 구조에 사람, 여러 마리의 개, 각 개에 대한 여러 마리의 강아지가 포함되어 있다고 가정합니다. 목표는 각 개 중에서 한 마리의 강아지를 선택하여 가능한 모든 강아지 조합 목록을 생성하는 것입니다.
SQL에서는 데카르트 곱 연산을 사용하여 이를 달성할 수 있습니다. 예:
<code class="language-sql">select * from puppies a, puppies b where a.parent='dog1' and b.parent='dog2'</code>
LINQ를 사용하여 유사한 작업을 수행할 수 있나요?
컴파일 시 설정된 개의 크기(예: 개의 수)가 알려진 경우 다음과 같은 간단한 접근 방식을 사용할 수 있습니다.
<code class="language-csharp">from p1 in dog1.Puppies from p2 in dog2.Puppies from p3 in dog3.Puppies select new {p1, p2, p3};</code>
하지만, 수집된 개 수를 알 수 없는 경우에는 보다 일반적인 접근 방식이 필요합니다. Eric Lippert는 자신의 기사와 StackOverflow에서 데카르트 곱을 계산하는 사용자 정의 방법 생성과 관련된 솔루션을 자세히 설명합니다.
<code class="language-csharp">public static IEnumerable<IEnumerable<T>> CartesianProduct<T>(IEnumerable<IEnumerable<T>> sets) { // ... implementation omitted for brevity }</code>
이 방법을 사용하면 원하는 쿼리를 다음과 같이 표현할 수 있습니다.
<code class="language-csharp">CartesianProduct(from dog in person.Dogs select dog.Puppies)</code>
이는 강아지 시퀀스 시퀀스를 반환하며, 각 시퀀스는 각 개에서 강아지 한 마리의 조합을 나타냅니다. 예를 들어 개 'dog1'과 'dog2'에 각각 강아지 'p11', 'p12', 'p21'이 있는 경우 출력은 다음과 같습니다.
<code>{p11, p21} {p11, p22} {p12, p21} {p12, p22}</code>
위 내용은 LINQ는 다양한 세트 수를 사용하여 데카르트 곱을 어떻게 수행할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!