在拆分Scala列表时,需要澄清

时间:2013-01-28 20:14:57

标签: list scala

给出

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))

为什么最后一个元素掉了?

2 个答案:

答案 0 :(得分: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个项目分组的位置返回到额外List

答案 1 :(得分:2)

因为你得到三个清单。

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