我想定义一个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