【发布时间】:2017-07-11 18:05:34
【问题描述】:
好的。我知道。这是 Odersky's Course 中的一个练习。但是我好几天都坚持这个。
定义方法来创建输入集的所有子集:
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 行),涉及递归、标准库中的一些项目以及对文件中另一个方法的调用(提示:它是该文件中的下一个方法)。我希望这不是有害多于有益。祝你好运。 -
嗯,对标准库的方法有什么建议吗?
-
我使用了
::和flatMap()并使用distinct删除了冗余。 (不要告诉任何人我说过。)