0

给定

println(split(7, (1 to 15).toList))

跑步时

  def split[X](n: Int, xs: List[X]): (List[X], List[X]) = {
    if (n <= 0) (Nil, xs)
    else if (n >= xs.size) (xs, Nil)
    else {
      val grouped = xs.grouped(n).toList
      return (grouped(0), grouped(1))
    }
  }

我明白了

(List(1, 2, 3, 4, 5, 6, 7),List(8, 9, 10, 11, 12, 13, 14))

为什么最后一个元素被丢弃了?

4

2 回答 2

4

grouped返回三个IndexedSeq,而您只返回前两个。

scala> (1 to 15).grouped(7).toList
res0: List[scala.collection.immutable.IndexedSeq[Int]] = List(
  Vector(1, 2, 3, 4, 5, 6, 7), 
  Vector(8, 9, 10, 11, 12, 13, 14),
  Vector(15)
)

grouped返回一个生成大小大小列表的迭代器,如果元素不均分,则最后一个将被截断,因此您可以看到将 15 个项目与 7 分组的位置返回一个额外的List.

于 2013-01-28T20:19:13.383 回答
2

因为你得到了三个列表。

您将 15 个元素的列表划分为(最多)7 个元素的列表。你最终得到一个 7 的列表,第二个 7 和三分之一的 1 个元素。

于 2013-01-28T20:18:55.073 回答