0

私はList[Int]1から10まで持っていて、 List[List[Int]]2つを含むものを作りたいと思っていList[Int]ます。1つは偶数を含み、もう1つは奇数を含みます。結果は次のようになります。

List(List(2,4,6,8,10),List(1,3,5,7,9))

私はこれらのことを試しました:

1.to(10).toList.span((x:Int) => x % 2 == 0) 

val lst = 1.to(10).toList; lst span (_%2==0)

ただし、これらはどちらも機能しませんでした。

誰かがこの問題について私を助けることができますか?

4

1 に答える 1

3

使用する必要のある方法はpartition、ではありませんspan

scala> (1 to 10).partition(_ % 2 == 0)
res0: (IndexedSeq[Int], IndexedSeq[Int]) = (Vector(2, 4, 6, 8, 10),Vector(1, 3, 5, 7, 9))

あなたが欲しいのでList[List[Int]]、あなたはこれをすることができます:

val lst = (1 to 10).toList
val (evens, odds) = lst.partition(_ % 2 == 0)
val newList = List(evens,odds) // List(List(2, 4, 6, 8, 10), List(1, 3, 5, 7, 9))

このspanメソッドは、単一のポイントでシーケンスを分割するためにのみ使用できます。

scala> (1 to 10).span(_ < 5)
res1: (Range, Range) = (Range(1, 2, 3, 4),Range(5, 6, 7, 8, 9, 10))

を試してみるとlst.span(_ % 2 == 0)、プログラムは最初の項目1がテスト()に合格しなかったことを検出した_ % 2 == 0ため、すべての要素が2番目のリストに入れられ、最初の項目には何も残されませんでした。

于 2012-09-05T02:50:40.030 に答える