好的。我知道。這是來自Odersky課程的練習。但是我很困惑這幾天。創建所有子集
定義方法來創建輸入集合的所有子集:
def combination(occ: List[(Char,Int)]) : List[List[(Char,Int)]]
實施例:用於輸入List(('a', 2), ('b', 2))
獲得輸出:
List(
List(),
List(('a', 1)),
List(('a', 2)),
List(('b', 1)),
List(('a', 1), ('b', 1)),
List(('a', 2), ('b', 1)),
List(('b', 2)),
List(('a', 1), ('b', 2)),
List(('a', 2), ('b', 2))
)
完善。目前,我得到兩件不同的事情:所有夫婦(1a)和單個元素列表(1b)
1a它的工作原理。它給了我所有的夫妻(一般的元組)
def combinations(occurrences: List[(Char,Int)]) : List[List[(Char,Int)]] = {
if (occurrences.isEmpty) List(Nil)
else {
val entry = occurrences.head;
for (
first <- (entry._2 to 1 by -1).toList;
rest <- combinations(occurrences.tail))
yield (entry._1, first) :: rest
}
}
輸出List(List((a,2), (b,2)), List((a,2), (b,1)), List((a,1), (b,2)), List((a,1), (b,1)))
1B。它的工作原理只是我不明白空列表(嗯,當然我不)
def combinations(occurrences: List[(Char,Int)]) : List[List[(Char,Int)]] = {
for (entry <- occurrences;
freq <- (entry._2 to 1 by -1).toList) yield List((entry._1,freq))
}
輸出List(List((a,2)), List((a,1)), List((b,2)), List((b,1)))
現在我完全陷入如何既結合起來。 你能幫我理解我該怎麼做到這一點?
我很討厭告訴你這一點,因爲當我讀完這門課時閱讀這樣的東西會讓我爬上一堵牆,但它可以在一個語句中完成,即'='後面不需要'{' 。這是一個相當長的單一語句(我將它分成3行),涉及遞歸,標準庫中的一些項目以及文件中另一個方法的調用(提示:它是該文件中的下一個方法)。我希望這不是更有害,而不是有益的。祝你好運。 – jwvh
只有標準庫的方法才能提供任何建議? –
我使用了'::'和'flatMap()',並用'distinct'刪除了冗餘。 (不要告訴任何人,我這樣說。) – jwvh