1
은 내가 우아하게 모델링하는 방법을 잘 모르겠어요 다음과 같은 문제가 내가 각 조합에 대한 값을 생성 할 C
의 인스턴스을 감안할 때중첩 된 개체의 모든 조합을 반복하는 방법은 무엇입니까? <p></p> 나는 다음과 같은 클래스를 가지고 말 :
class A(v: String)
class B(v: String, as: Seq[A])
class C(v: String, bs: Seq[B])
C
x B
x A
C
인스턴스에 B
이 없거나 B
인스턴스에 A
이없는 경우에도 값을 생성하려고합니다.
간단하게하기 위해 내가 생산하고자하는 값이 c.v - b.v - a.v
형태의 문자열이라고합시다.
def produce(c: C): List[String] = ???
있도록 : :이 보내고 이해뿐만 flatMap
부터 사용 achiving 시도
val c1 = new C(v = "c1", bs = Seq.empty)
produce(c1) // List("c1 - - ")
val c2 = new C(
v = "c1",
bs = Seq(new B(v = "b1", as = Seq.empty), new B(v = "b2", as = Seq.empty))
)
produce(c2) // List("c1 - b1 - ", "c1 - b2 - ")
val c3 = new C(
v = "c1"
bs = Seq(
new B(v = "b1", as = Seq(new A("a1"), new A("a2)))
new B(v = "b2", as = Seq(new A("a3"), new A("a4))),
)
)
produce(c3) // List("c1 - b1 - a1",
// "c1 - b1 - a2",
// "c1 - b2 - a3",
// "c1 - b2 - a4")
- 즉
나는 다음과 같은 방법을 구현하는 방법을 찾고 있어요 비어있는Seq
위에는 비어있는 것들로
Seq
을 비워야 만하는 값이 생성되지 않습니다. 코드는 복잡하고 오래되었습니다.
제 질문은 이것을 수행하는 가장 좋은 방법입니다. 이 작업을 단순화하는 데 도움이되는 데이터 구조가 있습니까?
감사합니다.
as/bs 시퀀스를 통해 패턴 일치를 시도하고 빈/비어 있지 않은 경우에 해당하는 동작을 구현할 수 있습니다. – jarandaf
@ jarandaf ok 제 말은 당신이 의미하는 바를 이해한다고 생각하지만, 중첩 된 이해력 (또는 단순히 'flatMap's)과 패턴 수학의 결과를 가져올 것이라고 생각합니다. 그것은 작동하지만, 나는 좀 더 elegane \ idiomatic (특히 네가 3 개의 네 스팅을 가지고 있다면)을 찾고있다. – Dani
출력 ""c1 - - "'는'C'가 얼마나 많은 중첩 된 레벨이 그 아래에 있는지를 알고 있다고 가정합니다. 저거 알려진거야? – maasg