Это продолжение: Развернуть набор наборов строк в декартово произведение в 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]]
и возврата a Set[B]
. То есть, чтобы преобразовать тип при объединении элементов.
Пример использования будет заключаться в наборе строк (как указано выше) и выводе длин их конкатенации. Функция f
в combine
будет иметь вид:
(a:Int, b:String) => a + b.length
Я не смог придумать реализацию. Кто-нибудь имеет ответ?