如何在Scala中表示复合键?
如果我有如何在Scala中表示复合键?,scala,Scala,如果我有 val key1 = "mykey" val key2 = 427 两个都可以散列吗?我可以做类似的事情 val compoundKey = key1 + "#" + key2 myhash.put(compoundKey, value) 然而,这似乎有点笨拙使用元组: val compoundKey = (key1, key2) 我总是喜欢新数据类型而不是元组,原因有三: case class CompoundKey(key1: String, key2: String) 您
val key1 = "mykey"
val key2 = 427
两个都可以散列吗?我可以做类似的事情
val compoundKey = key1 + "#" + key2
myhash.put(compoundKey, value)
然而,这似乎有点笨拙使用
元组
:
val compoundKey = (key1, key2)
我总是喜欢新数据类型而不是元组,原因有三:
case class CompoundKey(key1: String, key2: String)
预期的复合键”比“预期的Tuple2[String,String]
”更清晰。或者,它只是帮助您使用类型注释,使您自己的代码更具可读性,特别是在嵌套结构(如映射)中
val k:CompoundKey=expensivecomputation或onovousethodcallsinarow(…)
val-keyMap:Map[CompoundKey,Key]
而不是Map[(String,String),Key]
val ckey=CompoundKey(“foo”、“bar”)
ckey.key1
而不是ckey.\u 1
String
。这意味着如果您将String
更改为任何您不必在整个代码中更改的Tuple2[String,String]
。只有CompoundKey
必须进行调整(我甚至会对Key类使用包装器
case class Key(str:String)
)或者如果键值放在一起时有某种意义,那么创建一个新的数据类型来表示分组。请注意,Tuple2
在Int
上是专用的,Long
和Double
。您是要接受答案还是在寻找另一个答案?