我试图制作尾递归方法,但我使用Map并且我不知道如何使用模式匹配来检查Map是否为空/ null并获得头/尾:
def aa(a:Map[String, Seq[Operation]]): Map[String, (Seq[Operation], Double)] = {
def aaRec(xx:Map[String, Seq[Operation]],
res:Map[String, (Seq[Operation], Double)],
acc:Double = 0): Map[String, (Seq[Operation], Double)] = xx match {
case ? =>
res
case _ =>
val head = xx.head
val balance = head._2.foldLeft(acc)(_ + _.amount)
aaRec(xx.tail, res + (head._1 -> (head._2, balance)), balance)
}
aaRec(a, Map[String, (Seq[Operation], Double)]())
}
}
case empty map和case h :: t是什么语法正确?
提前感谢
答案 0 :(得分:6)
Map
没有订单,因此没有head
或tail
。它也没有unapply/unapplySeq
方法,因此您无法在Map
上进行模式匹配。
我认为使用foldLeft
可能是您的最佳选择。
答案 1 :(得分:3)
我不确定是否可以在地图上进行模式匹配,但可以使用基本的组合方法重写此代码:
def aa(a:Map[String, Seq[Operation]]): Map[String, (Seq[Operation], Double)] =
a.mapValues(seq => (seq, seq.map(_.amount).sum))