Scala大型列表中的模式匹配案例

elm*_*elm 0 scala pattern-matching scala-collections

对于在有限域内返回值的案例的长列表,如何减少案件声明的数量增加?比如考虑一下

"abc" match {
  case "a"   => 1
  case "ab"  => 1
  case "aw"  => 2
  case "hs"  => 2
  case "abc" => 1
  case _     => 0
}
Run Code Online (Sandbox Code Playgroud)

Map[Set[String],Int]过去哪里

val matches = Map( Set("a","ab","abc") -> 1, Set("aw","hs") -> 2 )
Run Code Online (Sandbox Code Playgroud)

并定义

def getMatch(key: String, m: Map[Set[String],Int]) = {
  val res = m.keys.collectFirst{ case s if s(key) => m(s) }
  res.getOrElse(0)
}
Run Code Online (Sandbox Code Playgroud)

是否有更简单和/或更有效的方法?

Mar*_*ski 6

您可以对案件进行分组:

"abc" match {
  case "a" | "ab" | "abc"   => 1
  case "aw" | "hs"  => 2
  case _     => 0
}
Run Code Online (Sandbox Code Playgroud)