这是对以下问题的跟进:如何在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
我无法提供实现方法。有人有答案吗?