gpt4 book ai didi

scala - 如何从 Scala TreeMap 设置和获取键?

转载 作者:行者123 更新时间:2023-12-04 17:12:33 24 4
gpt4 key购买 nike

假设我有

import scala.collection.immutable.TreeMap

val tree = new TreeMap[String, List[String]]

现在在上述声明之后,我想将键“k1”分配给 List("foo", "bar")
然后我如何获取或读回 key “k1”并读回不存在的 key “k2”?

如果我尝试读取不存在的 key “k2”会发生什么?

最佳答案

“变异”的最佳方式不可变 map 是通过在变量中引用它( var 而不是 val ):

var tree = TreeMap.empty[String, List[String]]
tree += ("k1" -> List("foo", "bar")) //a += b is sugar for "c = a + b; a = c"

可以使用 apply 直接访问它方法,其中引入了 Scala 语法糖,因此您可以使用括号进行访问:
val l = tree("k1") //equivalent to tree.apply("k1")

但是,我很少访问这样的 map ,因为该方法会抛出 MatchError是关键不存在。使用 get相反,它返回 Option[V]哪里 V是值类型:
val l = tree.get("k1") //returns Option[List[String]] = Some(List("foo", "bar"))
val m = tree.get("k2") //returns Option[List[String]] = None

在这种情况下,缺少键的返回值是 None .我可以用可选结果做什么?那么,你可以使用方法 map , flatMap , filter , collectgetOrElse .尽量避免对其进行模式匹配,或使用 Option.get方法直接!

例如:
val wordLen : List[Int] = tree.get("k1").map(l => l.map(_.length)) getOrElse Nil

编辑 :一种构建 Map 而不将其声明为 var 的方法,并假设您通过转换一些单独的集合来做到这一点,就是通过折叠来做到这一点。例如:
//coll is some collection class CC[A]
//f : A => (K, V)
val m = (TreeMap.empty[K, V] /: coll) { (tree, c) => tree + f(c) }

这可能不适用于您的用例

关于scala - 如何从 Scala TreeMap 设置和获取键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6422889/

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