Если у меня есть
val key1 = "mykey" val key2 = 427
Возможно ли хешировать обоими? Я мог бы сделать что-то вроде
val compoundKey = key1 + "#" + key2 myhash.put(compoundKey, value)
Однако это кажется немного неуклюжим
Используйте Tuple:
Tuple
val compoundKey = (key1, key2)
Я всегда предпочитаю новый тип данных над Tuple по трем причинам:
case class CompoundKey(key1: String, key2: String)
У вас есть имя, особенно в предупреждениях компилятора, и "expected CompoundKey" яснее, чем "expected Tuple2[String,String]". Или это просто поможет вам с аннотацией типа, чтобы сделать ваш собственный код более читабельным, особенно во вложенных структурах, таких как Карты
expected CompoundKey
expected Tuple2[String,String]
val k: CompoundKey = expensiveComputationOrNonObviousMethodCallsInARow(...) val keyMap: Map[CompoundKey,Key] вместо Map[(String,String),Key]
val k: CompoundKey = expensiveComputationOrNonObviousMethodCallsInARow(...)
val keyMap: Map[CompoundKey,Key]
Map[(String,String),Key]
Доступ к подразделам в CompoundKey можно осуществлять по имени:
val ckey = CompoundKey("foo","bar") ckey.key1 вместо ckey._1
val ckey = CompoundKey("foo","bar")
ckey.key1
ckey._1
String
Tuple2[String,String]
CompoundKey
(я бы даже использовал оболочку case class Key(str: String) для ключевого класса)
case class Key(str: String)