scala - Scala 中的多键映射

标签 scala map hashmap key scala-collections

如何在 Scala 中创建一个 Map ,它不仅以单个参数为键,而且以两个或三个为键。

val map = //..?
map("abc", 1) = 1
println(map("abc", 2)) // => null
println(map("abc", 1)) // => 1

我尝试使用元组作为键,但后来我必须分配这样的值
map(("abc", 1)) = 1

我可以以某种方式摆脱内括号吗?

最佳答案

你也可以使用

map += ("abc", 1) -> 1

如果映射键代表某些东西(例如用户信息)并且如果您想增加代码的清晰度(特别是如果键中有 3 个元素),我会使用 case 类作为键。 Case 类实现了 equals 和 hashcode,因此您可以安全地将它们用作映射中的键。不过代码会更冗长:
case class MapKey(s: String, i: Int, d: Double)

val map = Map[MapKey, X](MapKey("a", 1, 1.1) -> "value1", MapKey("b", 2, 2.2) -> "value2")

val map2 = map + (MapKey("c", 3, 3.3) -> "value3")

//or for mutable map
map(MapKey("d", 4, 4.4)) = "value4"
//or
map += MapKey("e", 5, 5.5) -> "value5"

关于scala - Scala 中的多键映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14927357/

相关文章:

java - 使用常规 HashMap 双重检查锁定

java - 具有软引用值的 HashMap 实现

javascript - ExtJS 中有 map() 函数吗?

java - ArrayList<String>,String的HashMap不正常?

scala - 将Map [K,Option [V]]转换为Map [K,V]的更好方法

json - 在 Circe 中解析原始类型

json - 在 Play 2.1 Json Api 中获取异常行号?

scala - .get(x)行为从何而来?

c++ - 使用 std::string 作为 std::map 的键

java - 传递 Collections.unmodifiable* 一个已经用 Collections.unmodifiable* 包装的实例是多么低效?