如果我有
val key1 = "mykey"
val key2 = 427
两者都可以哈希吗?我可以做类似
的事情val compoundKey = key1 + "#" + key2
myhash.put(compoundKey, value)
然而,这似乎有点笨重
答案 0 :(得分:12)
使用Tuple
:
val compoundKey = (key1, key2)
答案 1 :(得分:9)
我总是喜欢Tuple上的新数据类型有三个原因:
case class CompoundKey(key1: String, key2: String)
您有一个名字,特别是在编译器警告中,“expected CompoundKey
”比“expected Tuple2[String,String]
”更清晰。或者它只是帮助您使用类型注释来使您自己的代码更具可读性,尤其是在像地图
val k: CompoundKey = expensiveComputationOrNonObviousMethodCallsInARow(...)
val keyMap: Map[CompoundKey,Key]
代替Map[(String,String),Key]
可以通过名称访问CompoundKey中的子键:
val ckey = CompoundKey("foo","bar")
ckey.key1
代替ckey._1
String
。这意味着,如果您将String
更改为您不必在代码中更改Tuple2[String,String]
的任何内容。只有CompoundKey
必须进行调整。(我甚至会使用包装器case class Key(str: String)
作为密钥类)