알파벳이 N
인 경우이 알파벳에 대해 길이가 다른 모든 문자열 M
을 열거하고 싶다고 가정합니다. Scala는 표준 라이브러리 함수를 제공합니까?주어진 알파벳에 주어진 길이의 모든 문자열을 열거하는 표준 함수
0
A
답변
3
another answer에서 영감을 촬영 :
val letters = Seq(1, 2, 3)
Iterable.fill(n)(letters).foldLeft(List(List[Int]())) { (a, b) =>
for (a<-a;b<-b) yield(b::a)
}
여분의 유형 약어에 대한 필요성이 조금 성가신 있지만 (그것없이 작동하지 않습니다
val letters = Seq("a", "b", "c")
val n = 3
Iterable.fill(n)(letters) reduceLeft { (a, b) =>
for(a<-a;b<-b) yield a+b
}
Seq[java.lang.String] = List(aaa, aab, aac, aba, abb, abc, aca, acb, acc, baa, bab, bac, bba, bbb, bbc, bca, bcb, bcc, caa, cab, cac, cba, cbb, cbc, cca, ccb, ccc)
문자열이 아닌 다른 작업을하려면 누군가 다른 방법을 모른다면).
2
또 다른 해결책 :
val alph = List("a", "b", "c")
val n = 3
alph.flatMap(List.fill(alph.size)(_))
.combinations(n)
.flatMap(_.permutations).toList
업데이트 : 당신이 출력에 문자열 목록을 얻고 싶은 경우에, alph
문자열이어야합니다.
val alph = "abcd"
+0
'n '이'alph'의 크기보다 클 때 작동하지 않는 것 같다. 예를 들어 :'alph = List (0, 1)','n = 3'은 예상 된'8'과 반대로 6 개의 시퀀스만을 생성합니다. – dsg
'n'크기의 보조 목록을 제거 할 수 있습니까? – Michael
@Michael은 'fill'을 사용하여 4e6을 제안합니다. 나는 그것을 반영하기 위해 나의 대답을 편집 할 것이다. – Owen
좋습니다! 새 버전을 가져 주셔서 감사합니다. – Michael