我有一组整数集向量。我想要每个向量中的第一个条目。我的尝试只是给我第一个向量中的每个项目。
scala> (1 to 4).map((10 to 13).toSet.subsets(_).toVector)
res112: scala.collection.immutable.IndexedSeq[Vector[scala.collection.immutable.Set[Int]]] = Vector(Vector(Set(10), Set(11), Set(12), Set(13)), Vector(Set(10, 11), Set(10, 12), Set(10, 13), Set(11, 12), Set(11, 13), Set(12, 13)), Vector(Set(10, 11, 12), Set(10, 11, 13), Set(10, 12, 13), Set(11, 12, 13)), Vector(Set(10, 11, 12, 13)))
scala> (1 to 4).map((10 to 13).toSet.subsets(_).toVector).mkString("\n")
res113: String =
Vector(Set(10), Set(11), Set(12), Set(13))
Vector(Set(10, 11), Set(10, 12), Set(10, 13), Set(11, 12), Set(11, 13), Set(12, 13))
Vector(Set(10, 11, 12), Set(10, 11, 13), Set(10, 12, 13), Set(11, 12, 13))
Vector(Set(10, 11, 12, 13))
scala> (1 to 4).map((10 to 13).toSet.subsets(_).toVector).take(1).mkString("\n")
res114: String = Vector(Set(10), Set(11), Set(12), Set(13))
scala> (1 to 4).map((10 to 13).toSet.subsets(_).toVector).head.mkString("\n")
res115: String =
Set(10)
Set(11)
Set(12)
Set(13)
我想要得到的是:
Set(10)
Set(10, 11)
Set(10, 11, 12)
Set(10, 11, 12, 13)
答案 0 :(得分:3)
(1 to 4).map((10 to 13).toSet.subsets(_).toVector).flatMap(_.headOption)
您正在获取外部向量的头部,而不是外部向量的每个分量的头部。请注意,这里使用flatMap
和headOption
较为安全:head
会在空集合上崩溃。
答案 1 :(得分:3)
很简单:
val vec = (1 to 4).map((10 to 13).toSet.subsets(_).toVector)
val res = vec.map(_.head)
_.head
选择每个Set
中的第一个元素。
作为奖励知识,_.tail
会选择除每个Set
的开头以外的所有内容。
我希望这会有所帮助。
答案 2 :(得分:2)
您已经足够亲密,您不希望第一个向量的第一个条目,而是每个向量的第一个条目。这是地图,因为您正在转换集合。
val vectors = (1 to 4).map((10 to 13).toSet.subsets(_).toVector)
val firstSets = vectors .map(_.head)
firstSets.mkString("\n")
// Set(10)
// Set(10, 11)
// Set(10, 11, 12)
// Set(10, 11, 12, 13)
答案 3 :(得分:1)
您可以使用scanLeft
:
(10 to 13).scanLeft(Set.empty[Int])((a,b)=> a + b ).tail.mkString("\n")
在控制台上:
scala> (10 to 13).scanLeft(Set.empty[Int])((a,b)=> a + b ).tail.mkString("\n")
res41: String =
Set(10)
Set(10, 11)
Set(10, 11, 12)
Set(10, 11, 12, 13)