6

我在这里有一个简单的任务:根据批量大小将 n 个元素的集合分解为 m 个集合——通常我希望将我的子集合限制为 1,000 个元素。我写了这样的东西,其中输入是主要的大型集合:

var strings = Set[String]() ++ input
var sets = List[Set[String]]()
while (!strings.isEmpty) {
  val (head, rest) = strings.splitAt(100)
  sets = sets :+ head
  securities = rest
}

效果很好,但我认为必须有一个更优雅/更实用的解决方案来解决 Scala 中这样一个简单而常见的问题。有人请赐教。

4

2 回答 2

15

它是存在的:.grouped(batchSize). 例子:

scala> List.range(1,10).toSet.grouped(3).toList
// res0: List[scala.collection.immutable.Set[Int]] = List(
//    Set(5, 1, 6), 
//    Set(9, 2, 7), 
//    Set(3, 8, 4))
于 2013-05-23T14:23:15.103 回答
1

打电话Set(1,2,3).grouped(1).toList

scala> Set(1,2,3).grouped(1).toList
res1: List[scala.collection.immutable.Set[Int]] = List(Set(1), Set(2), Set(3))
于 2013-05-23T14:22:53.183 回答