在Scala中查找列表的总和

时间:2017-04-20 13:57:49

标签: scala

如果我有一个字符串列表,我知道列表中每个字符串的数字值如何得到列表的总和?

示例:

我知道:

a = 1
b = 2
c = 3
d = 4
e = 5

我获得以下列表:

List("a","b","d") 

计算和7的最佳方法是什么?

由于

3 个答案:

答案 0 :(得分:5)

val a = Map("a" -> 1, "b" -> 2, "c" -> 3, "d" -> 4, "e" -> 5)

val b = List("a", "b", "d")

b.map(a.getOrElse(_, 0)).sum

答案 1 :(得分:0)

如果您知道这些值与元素位置相同,那么您可以避免使用地图:

object test {
  val list = List("a", "b", "c", "d", "e")

  def sumThem = (for((letter, value) <- list.zipWithIndex) yield(value + 1)).sum
}

scala> test.sumThem
res2: Int = 15

答案 2 :(得分:0)

如果您100%确定它只是字母

List("a","b","d").foldLeft(0)(_ + _.hashCode - 96)

如果没有,你可以在

之前映射它
val letters = (1 to 26).map(x => Character.toString((x+96).toChar) -> x).toMap

并使用@ sheunis的回答:

val input = List("a","b","d")
input.map(letters.getOrElse(_, 0)).sum