Что такое неплащенный вектор наборов Scala: (от 1 до 2) .flatMap ((от 1 до 3) .toSet.subsets (_))? - PullRequest
0 голосов
/ 29 июня 2019

Я вижу (1 to 2) это диапазон.

scala> (1 to 2)
res20: scala.collection.immutable.Range.Inclusive = Range(1, 2)

Я вижу наборы из этого итератора.

scala> (1 to 3).toSet.subsets
res0: Iterator[scala.collection.immutable.Set[Int]] = non-empty iterator

scala> (1 to 3).toSet.subsets.mkString("\n")
res1: String =
Set()
Set(1)
Set(2)
Set(3)
Set(1, 2)
Set(1, 3)
Set(2, 3)
Set(1, 2, 3)

Наконец, здесь представлен вектор множеств при выравнивании. Что это, когда не расплющен? Как я могу отобразить это?

scala> (1 to 2).flatMap((1 to 3).toSet.subsets(_))
res19: scala.collection.immutable.IndexedSeq[scala.collection.immutable.Set[Int]] = Vector(Set(1), Set(2), Set(3), Set(1, 2), Set(1, 3), Set(2, 3))

1 Ответ

3 голосов
/ 29 июня 2019

Замена flatMap на map даст необъявленный список подмножеств разных размеров:

(1 to 2).map((1 to 3).toSet.subsets(_).toVector)
// res1: scala.collection.immutable.IndexedSeq[Vector[scala.collection.immutable.Set[Int]]] = Vector(
//   Vector(Set(1), Set(2), Set(3)),
//   Vector(Set(1, 2), Set(1, 3), Set(2, 3))
// )

Обратите внимание, что, поскольку subsets возвращает Iterator[Set[A]], toVector преобразует Iterator s во вложенные Vector s.

...