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は 3IndexedSeqを返しますが、最初の 2 つだけを返しています。

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サイズ size のリストを生成するイテレータを返します。ただし、要素が均等に分割されない場合は最後のリストが切り捨てられるため、15 個のアイテムを 7 でグループ化すると余分な が返されることがわかりますList

于 2013-01-28T20:19:13.383 に答える
2

3 つのリストを取得するためです。

15 個の要素のリストを、それぞれ (最大) 7 個の要素のリストに分割します。最終的には 7 個のリスト、2 番目は 7 個、3 番目は 1 個の要素のリストになります。

于 2013-01-28T20:18:55.073 に答える