我有一个字符串列表
val str = List("A","B","C","D")
并给出:
val map = Map(("A"->3),("B"->1),("C"->10),("D"->5))
为了根据给定的映射值对str列表进行排序,我尝试了str.sortBy(map)
。这给了我错误"A" key is not found
。有人可以帮我解决我做错了什么吗?
它应该按原样工作。让我们解释一下原因。的签名sortBy
是:
def sortBy[B](f: A => B)(implicit ord: Ordering[B]): C = sorted(ord on f)
因此,当您这样做时str.sortBy(map)
,sortBy
期望会得到String => Int
。str.sortBy(map)
等效于:
str.sortBy(s => map(s))
注意Map
扩展MapOps
(在Scala 2.13中,在Scala 2.12中是MapLike)。MapOps
(和MapLike
)公开一个apply
方法,该方法采用(在您的情况下)String
并返回Int
:
def apply(key: K): V = get(key) match {
case None => default(key)
case Some(value) => value
}
因此写作str.sortBy(map)
与以下内容相同:
str.sortBy(s => map.apply(s))
与以下内容相同:
str.sortBy(map.apply)
代码在Scastie运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句