Scala:用于构造“ MAP”的简明语法,将int值分配给字符



我想定义一个Map,将值分配给类似的字母:

  • 'A''B''C'应分配值1
  • 'D''E''F'应分配值2

等。

这是我尝试的:

   def lettersAndValues = Map(
     1 -> Set('A', 'B', 'C'),
     2 -> Set('D', 'E', 'F'),
   ).flatMap {case (value, letters) => letters.map(letter =>(letter, value))}

现在,我想使用字母的值来计算单词的分数,例如计算"ABCD"的值应给出1+1+1+2 = 5。如何定义分数函数?还有其他更简洁的方法可以将值分配给字母以进行计算?

如果您的目标是快速定义许多字母的值,然后定义得分函数,这是做到这一点的较短方法:

val letterToValue = List(
  "ABC" -> 1,
  "DEF" -> 2
).flatMap{
  case (letters, value) => letters.map(letter => (letter, value))
}.toMap
def score(word: String) = word.map(letterToValue).sum
println(score("BED"))
println(score("BAD"))
println(score("CAFEBABE"))

它打印:

5
4
11

验证方法:

val generatorMap = Map(
  "ABC" -> 1,
  "DEF" -> 2
)
val letterToValue: Map[Char, Int] = for {
  (ls, v) <- generatorMap
  l <- ls
} yield {
  (l, v)
}
def score(word: String) = word.map(letterToValue).sum

最新更新