在Scala中将2个键映射到相同值的最简洁方法

时间:2018-02-06 22:19:15

标签: regex scala functional-programming mapping

我有一张地图,其中有两种字符串必须映射到相同的值。例如,密钥要么必须完全是“测试1”,要么完全是“测试1额外”,并且它们都映射到值1

val result = Map(
    "Test 1" -> 1,
    "Test 1 Extra" -> 1,
    "Test 2" -> 2,
    "Test 2 Extra" -> 2,
    "Test 3" -> 3,
    "Test 3 Extra" -> 3
)

有了上述内容,它有点笨拙,特别是如果有更多类似的键值对。我可以想象有一种更简单的方法可以使用正则表达式来考虑可能在输入中的字符串Extra吗?

1 个答案:

答案 0 :(得分:0)

同样灵感:

case class DoubleKey[X](x1: X, x2: X) {
  def ->[A](a: A): List[(X, A)] = List(x1, x2).map((_, a))
}

def twice(extra: String)(s: String) = DoubleKey(s, s + extra)

val withExtra = twice(" extra") _
val res = List(
  withExtra("Test 1") -> 1, 
  withExtra("Test 2") -> 2, 
  withExtra("Test 3") -> 3
).flatten.toMap

println(res)

不需要正则表达式。