2017-02-28 13 views
0

에 ArrayBuffer [문자열] 요소의 순열에서 문자열을 만들기내가는 그 문자열을 만들기 위해 노력하고</p> <pre><code>val a: String = "E" val y: ArrayBuffer[String] = new ArrayBuffer("I", "G", "S") </code></pre> <p>이 스칼라

s"($a <=> (${y.mkString(" | ")}))" // & (~${y.mkString(" | ~")})" 

번째 부분에 대해 : 문자열의 일부 (제 1 항) (E <=> (I | G | S)), I 기능성 인이있을 , y에있는 요소의 순열은 어디에 있습니까? 즉, (~I | ~G) & (~I | ~S) & (~G | ~S)에 대한 설명을 작성하는 데 의견을 개선 (수정) 할 수있는 방법은 무엇입니까?

y.permutations을 사용하여 다른 문자열을 만든 다음이 문자열과 연결하려고합니다. 그러나 여기에서 "생성 된"수 있습니까? - 같은 방식으로 문자열 내에 있습니까?

감사합니다.

답변

1

귀하의 예에서 필요한 것은 조합이며 순열이 아닌 것 같습니다.

모든 요소 쌍에 대해 y이라는 용어를 사용하려면 combinations 방법을 사용하여 길이 2의 모든 조합을 찾을 수 있습니다. 그런 다음 필요한 형식으로 괄호 안에 각 쌍을 포장 할 수 있으며, 마지막으로 mkString 가지고있는 전체의 두 번째 부분 구축 : 당신은 문자열 보간에이 표현을 통합 할 수 있습니다

y.combinations(2).map { case Seq(a, b) => s"(~$a | ~$b)" }.mkString(" & ") 

:

s"($a <=> (${y.mkString(" | ")})) & ${ 
    y.combinations(2).map { case Seq(a, b) => s"(~$a | ~$b)" }.mkString(" & ")}" 
+0

예를, 그것은 정확히 내가 성취하려는 결과. 나는 이런 식으로 시도하는 것으로부터 아주 멀리 떨어져 있었다 : /. 정말 고마워요 - 정말이에요! – user4712458