Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Scala中表示复合键?_Scala - Fatal编程技术网

如何在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]

  • 可以通过名称访问CompoundKey中的子键:

    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
    。您是要接受答案还是在寻找另一个答案?