这个问题来自“Scala 中的函数式编程原则”@Coursera,所以我需要避免在这个问题中包含完整的代码——它已经过了截止日期,但总会有几年的时间。我一直在寻找有关实现此转换的方法的一般建议。
我有一组可变长度元组,一些小写字符串的完整子集
val indexes = Set('a', 'b', 'c')
和一组元组,每个字符允许出现的最大次数
val occurences = Set(('a', 1), ('b', 5), ('c', 2))
我想获得加权元组的组合:
val result = Seq(Set(), Set((a, 1)), Set((b, 1)), Set((b, 2)) ... Set((a, 1)(b, 2)(c, 2)) ...)
我的任务建议通过递归迭代构建结果的简单方法。
我想以更“结构性”的方式来做?方式。我的想法是获取所有可能的 char 子集并多路复用那些增加权重的子集(〜帖子最后一行中的伪代码)。
我通过handy subsets
operator得到了子集
val subsets = Seq(Set(), Set(a), Set(b), Set(c), Set(a, b), Set(a, c), Set(b, c), Set(a, b, c)
以及每个字符的特定 Int 值的映射,或者
val weightsMax Map(a -> 1, b -> 5, c -> 2)
val weightsAll Map(a -> List(1), b -> List(5,4,3,2,1), c -> List(2,1))
我真的不知道我应该为此操作使用哪种语言功能。我知道for
和收集操作,但没有经验与这个级别的人一起操作,因为我是功能范式(以及收集操作)的新手。制作一些企业风格的 java / XML 来解决这个问题我不会有任何问题(是的......)。
我想定义类似的东西:
FOREACH subset (MAP chars TO (COMBINATIONS OF weights FOR chars))