我有(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给我空列表作为第一个列表和原始副本作为第二个列表
答案 0 :(得分:8)
来自span
的{{3}}:"返回列表的最长前缀,其元素全部满足给定的谓词,以及列表的其余部分。"
所以这里span
给出了预期的结果:因为列表中的第一个元组没有字符d
,列表的最长前缀是每个元组都有字符{ {1}}确实是空列表。