knu*_*nub 5 scala key hashmap map scala-collections
如何在Scala中创建一个Map,它不仅将一个参数作为键,而是两个或三个.
val map = //..?
map("abc", 1) = 1
println(map("abc", 2)) // => null
println(map("abc", 1)) // => 1
Run Code Online (Sandbox Code Playgroud)
我尝试使用元组作为键,但后来我必须分配这样的值
map(("abc", 1)) = 1
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式摆脱内部括号吗?
Fel*_*ier 11
你也可以用
map += ("abc", 1) -> 1
Run Code Online (Sandbox Code Playgroud)
如果map键表示某些内容(例如用户信息),并且如果要为代码添加清晰度(特别是如果键中有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"
Run Code Online (Sandbox Code Playgroud)
您可以添加自己的增强功能Map:
import collection.mutable.Map
implicit class EnhancedMap[A,B,C](m: Map[(A,B),C]) {
def update(a: A, b: B, c: C) { m((a,b)) = c }
}
Run Code Online (Sandbox Code Playgroud)
然后
val map = Map(("abc", 1) -> 0)
map("abc", 1) = 1
Run Code Online (Sandbox Code Playgroud)
工作得很好.