문제

나는 모든 세트의 요소가 최종 조합에 고정 된 위치를 갖는 방식으로 4 개의 세트 요소의 다른 조합을 생성 할 수있는 방법을 찾고 있습니다. 내 요구 사항을 더 잘 설명하려면 4 세트의 샘플과 마지막으로 무엇을 제공 할 수 있습니다. 찾고 있습니다 :

세트#1 (거리 사전 방향) {n, s} 세트#2 (거리 이름) {Frankford, Baily} 세트#3 (거리 유형) {ave, st} set#4 (거리 우편 방향) {s}

예상 조합을 거의 나열하겠습니다.
n Baily Ave s
S Frankford St S
S Baily av s
.
.
.

이제 모든 세트의 요소가 그 자리에 떨어지고 있음을 알 수 있듯이
사전 방향이 제자리에 있습니다 1
거리 이름이 제자리에 있습니다
Streety 유형이 제자리에 있습니다
거리 설명이 제자리에 있습니다

이 작업을 수행하는 가장 효율적인 방법을 찾고 있습니다. 한 가지 방법은 다음과 같은 한 번에 2 세트에서 작업하는 것입니다.
세트 1과 세트 2의 조합 -> 결과 조합의 새로운 세트 5를 만듭니다.
세트 5와 세트 3의 조합 -> 새로운 세트 6의 새로운 세트 6을 만듭니다.
세트 6과 세트 4를 조합하여 최종 조합을 제공합니다.

이 일을하는 가장 좋은 방법이 있습니까? 친절하게 도와주세요. C# 또는 Java를 선호합니다.

감사

도움이 되었습니까?

해결책 3

@ david b what predirections 목록이 비어 있다면, 당신의 길을 통해 Cartesian 제품이 반환되지 않기 때문에 우리가 여전히 조합을 얻는 방법이 있습니까?


David B here :

var query =
  from d in predirections.DefaultIfEmpty()
  from n in names.DefaultIfEmpty()
  from t in types.DefaultIfEmpty()
  from s in postdirections.DefaultIfEmpty()
  select new {d, n, t, s};

다른 팁

다음은 모든 조합을 제공하는 LINQ (C#)가 있습니다. "가장 효율적인 방법"이 아닙니다.

var query =
  from d in predirections
  from n in names
  from t in types
  from s in postdirections
  select new {d, n, t, s};

일부 세트의 직교 제품을 찾고있는 것 같습니다. 루프를 위해 중첩을 사용하여 수행 할 수 있습니다. 다음은 요청하지 않은 Haskell 코드입니다.

Prelude> [[x,y] | x <- ['1'..'3'], y <- ['A'..'C']]
["1A","1B","1C","2A","2B","2C","3A","3B","3C"]
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top