Scala构建字符到整数映射的简洁语法及单词分值计算方法
嘿,这事儿不难!先给你捋清楚步骤:
首先,你生成字符到分值映射的思路是完全没问题的,我稍微调整了下变量名让它更直观,同时去掉了多余的逗号(避免编译警告):
// 先构建字符到分值的映射表 val charToScore = Map( 1 -> Set('A', 'B', 'C'), 2 -> Set('D', 'E', 'F'), // 这里可以继续补充其他分组,比如 3 -> Set('G','H','I'),按你的需求扩展就行 ).flatMap { case (score, chars) => chars.map(_ -> score) }
这段代码会生成一个Map[Char, Int],比如'A' -> 1、'D' -> 2这类键值对,完全符合你的需求。
接下来就是计算单词分值了,写一个简单的函数就能搞定:
def calculateWordScore(word: String): Int = { // 先把单词转成大写,兼容小写输入的情况 word.toUpperCase // 对每个字符取对应的分值,遇到不在映射里的字符默认给0(你也可以改成抛异常,看需求) .map(char => charToScore.getOrElse(char, 0)) // 把所有分值加起来 .sum }
测试一下你给的例子:
println(calculateWordScore("ABCD")) // 输出 5,正好是1+1+1+2的结果 println(calculateWordScore("abcD")) // 同样输出5,因为自动转成了大写
如果你的需求是必须只处理映射里的字符,遇到陌生字符要报错,那可以把getOrElse(char, 0)改成直接charToScore(char),这样遇到不在映射里的字符会抛出NoSuchElementException,你可以根据实际场景选择。
内容的提问来源于stack exchange,提问作者Dreeww
相关产品推荐
相关产品推荐

