【发布时间】:2011-05-29 16:45:06
【问题描述】:
这是对Expand a Set of Sets of Strings into Cartesian Product in Scala的后续跟进
想法是你想采取的:
val sets = Set(Set("a","b","c"), Set("1","2"), Set("S","T"))
然后回来:
Set("a&1&S", "a&1&T", "a&2&S", ..., "c&2&T")
一般的解决方案是:
def combine[A](f:(A, A) => A)(xs:Iterable[Iterable[A]]) =
xs.reduceLeft { (x, y) => x.view.flatMap {a => y.map(f(a, _)) } }
如下使用:
val expanded = combine{(x:String, y:String) => x + "&" + y}(sets).toSet
理论上,应该有一种方法可以获取Set[Set[A]] 类型的输入并返回Set[B]。即在组合元素的同时转换类型。
一个示例用法是接收一组字符串(如上)并输出它们连接的长度。 combine 中的 f 函数的形式如下:
(a:Int, b:String) => a + b.length
我无法提出实施方案。有人回答吗?
【问题讨论】: