0

我有一个List[Int]从 1 到 10 的列表,并且想要制作一个List[List[Int]]包含两个List[Int]的列表:一个包含偶数的列表,另一个包含奇数的列表。结果应该是这样的:

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),因此所有元素都放在了第二个列表中,第一个没有留下。

于 2012-09-05T02:50:40.030 回答