100, "Jonathan" -> 350, "Bob" -> 65) 我想从马克的账户中提取 50-6ren">
gpt4 book ai didi

scala - 基于先前值更新 Map 中值的惯用方法

转载 作者:行者123 更新时间:2023-12-01 00:02:35 29 4
gpt4 key购买 nike

假设我将银行帐户信息存储在一个不可变的 Map 中:

val m = Map("Mark" -> 100, "Jonathan" -> 350, "Bob" -> 65)

我想从马克的账户中提取 50 美元。我可以这样做:
val m2 = m + ("Mark" -> (m("Mark") - 50))

但是这段代码对我来说似乎很难看。有没有更好的方法来写这个?

最佳答案

没有 adjustMap不幸的是,API。我有时会使用如下函数(以 Haskell 的 Data.Map.adjust 为模型,参数顺序不同):

def adjust[A, B](m: Map[A, B], k: A)(f: B => B) = m.updated(k, f(m(k)))

现在 adjust(m, "Mark")(_ - 50)做你想做的。您也可以使用 pimp-my-library pattern获得更自然的 m.adjust("Mark")(_ - 50)语法,如果你真的想要更干净的东西。

(请注意,如果 k 不在 map 中,则上面的简短版本会引发异常,这与 Haskell 行为不同,并且可能是您想要在实际代码中修复的问题。)

关于scala - 基于先前值更新 Map 中值的惯用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9003874/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com