scala map.span()函数结果无效

scala map.span()函数结果无效,scala,Scala,根据下面的代码(scala 2.12.2),我希望得到以下结果: (Map(aa -> 1, ab -> 1, ac -> 1),Map(ba -> 2, bb -> 2, bc -> 2)) 但我有以下几点: (Map(),Map(ba -> 2, bc -> 2, ab -> 1, ac -> 1, aa -> 1, bb -> 2)) 为什么我错了 scala> val map = Map("aa"->

根据下面的代码(scala 2.12.2),我希望得到以下结果:

(Map(aa -> 1, ab -> 1, ac -> 1),Map(ba -> 2, bb -> 2, bc -> 2))
但我有以下几点:

(Map(),Map(ba -> 2, bc -> 2, ab -> 1, ac -> 1, aa -> 1, bb -> 2))
为什么我错了

scala> val map = Map("aa"->1,"ab"->1,"ac"->1,"ba"->2,"bb"->2,"bc"->2)
map: scala.collection.immutable.Map[String,Int] = Map(ba -> 2, bc -> 2, ab -> 1, ac -> 1, aa -> 1, bb -> 2)

scala> map.foreach(p=>if (p._1.startsWith("a")) println(p._1))
ab
ac
aa

scala> map.span(p=> p._1.startsWith("a"))
res30: (scala.collection.immutable.Map[String,Int], scala.collection.immutable.Map[String,Int]) = (Map(),Map(ba -> 2, bc -> 2, ab -> 1, ac -> 1, aa -> 1, bb -> 2))
span
在给定谓词为false时停止,这对您来说会立即发生,因为第一个键是
“ba”
,这会给您留下一个空的
映射

实际上,您正在查找
分区

scala> val map = Map("aa" -> 1, "ab" -> 1, "ac" -> 1, "ba" -> 2, "bb" -> 2, "bc" -> 2)
map: Map[String,Int] = Map(ba -> 2, bc -> 2, ab -> 1, ac -> 1, aa -> 1, bb -> 2)

scala> map.partition(p => p._1.startsWith("a"))
res1: (Map[String,Int], Map[String,Int]) = (Map(ab -> 1, ac -> 1, aa -> 1),Map(ba -> 2, bc -> 2, bb -> 2))
(截取签名以使REPL输出更具可读性)