使用解决方案here,我将两张地图一起添加,并将它们视为稀疏矢量。所以
def addTwoVectors(map1: Map[Int, Double], map2: Map[Int, Double]) = {
map1 ++ map2.map{ case (k,v) => k -> (v + map1.getOrElse(k,0)) }
}
现在我想制作这个通用的
def addTwoMaps[I, D <% Numeric[D]](m1: Map[I, D], m2: Map[I, D]) = {
m1 ++ m2.map{ case (k,v) => k -> (v + m1.getOrElse(k, 0.asInstanceOf[D])) }
}
不幸的是,它似乎不起作用:
error: type mismatch;
found : D
required: String
那么如何使这个功能变得通用呢?
答案 0 :(得分:3)
这个怎么样?
import scala.math.Numeric.Implicits._
def addTwoMaps[I, D](m1: Map[I, D], m2: Map[I, D])(implicit numeric: scala.math.Numeric[D]) = {
m1 ++ m2.map{ case (k: I,v: D) => k -> (v + m1.getOrElse(k, numeric.zero)) }
}
因为我不知道我有哪一个数字,我正在隐式地获取此信息,然后导入零方法,这对每个数字类型都是特定的。
实际上,我确实相信,scalaz解决方案会更加清洁,并希望有人会发布它。