类似于 Python 字典的适当 Scala 集合

jti*_*usj 5 scala

我有一个迭代返回 的算法(key, value)。我想要做的是将这些结果存储在一个结构中,这样如果key不存在,它将添加它和相应的value. 现在,如果键存在,它将附加value到现有的值数组中。

在 python 中,我可以使用以下格式的 python 字典来执行此操作:

dict = {'key1': [val1, val2, val3],
        'key2': [val4, val5], 
        'key3': [val6], ... }
Run Code Online (Sandbox Code Playgroud)

并简单地执行以下操作:

if key in dict.keys():
    dict[key].append(value)
else:
    dict[key] = [value]
Run Code Online (Sandbox Code Playgroud)

我如何在 Scala 中做到这一点?

jwv*_*wvh 1

也许是这样的?

scala> def insert[K,V](k: K, v: V, m: Map[K, List[V]]): Map[K, List[V]] = {
     | if (m contains k) m + (k -> (m(k) :+ v))
     | else m + (k -> List(v)) }
insert: [K, V](k: K, v: V, m: Map[K,List[V]])Map[K,List[V]]

scala> insert('b', 23, Map('b' -> List(2)))
res30: Map[Char,List[Int]] = Map(b -> List(2, 23))

scala> insert('b', 23, Map('c' -> List(2)))
res31: Map[Char,List[Int]] = Map(c -> List(2), b -> List(23))
Run Code Online (Sandbox Code Playgroud)

或者,结合谢尔盖的非常好的建议:

def insert[K,V](k: K, v: V, m: Map[K, List[V]]): Map[K, List[V]] =
  m + (k -> (m.getOrElse(k, List()) :+ v))
Run Code Online (Sandbox Code Playgroud)