为什么List分区有效,而span则无效

时间:2014-05-25 00:25:30

标签: scala

我有(Char,Int)这个List oX(它包含只有唯一Char值的对)

List(( ,3), (d,1), (e,3), (h,3), (i,1) , (l,3), (o,2), (r,2), (t,1), (w,1))

我需要将此列表分为2 - 一个包含任何一对' d' Char和另一个是剩下的。

所以我尝试了分区和跨度,但发现span不能按预期工作。以下是结果(从scala工作表复制)

 val myPartition = oX.partition(e => e._1 == 'd') > myPartition  : (List[(Char, Int)], List[(Char, Int)]) = (List((d,1)),List(( ,3), (e,3), (h,3), (i,1), (l,3), (o,2), (r,2), (t,1), (w,1)))

  val mySpan = oX.span(e => e._1 == 'd') > mySpan  : (List[(Char, Int)], List[(Char, Int)]) = (List(),List(( ,3), (d,1), (e,3), (h,3), (i,1), (l,3), (o,2), (r,2), (t,1), (w,1)))

我很困惑为什么给同一个谓词functino分区给出了我预期的结果而span给我空列表作为第一个列表和原始副本作为第二个列表

1 个答案:

答案 0 :(得分:8)

来自span的{​​{3}}:"返回列表的最长前缀,其元素全部满足给定的谓词,以及列表的其余部分。"

所以这里span给出了预期的结果:因为列表中的第一个元组没有字符d,列表的最长前缀是每个元组都有字符{ {1}}确实是空列表。