2017-04-20 45 views
0

如果我有一个字符串列表,并且我知道列表中每个字符串的数字值,我该如何获得列表的总和?查找Scala中的列表总和

例子:

我知道:

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

我给出以下列表:

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

什么计算的总和7的最佳方式?

感谢

+0

你要接受键的列表,并返回它们的和,像'地图[字符串,INT]'的功能?您没有提供足够的信息。列表中的字符串是否可以重复多次? –

+0

是的,我正在考虑创建一个Map [String,Int],然后做.foldLeft(0)(_ + _。2),但它是从列表转换到我遇到困难的地图。是的,字符串可以重复多次。谢谢 – Bazzoner

回答

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 
+0

完美。谢谢! – Bazzoner

+1

你也可以做'Map()。withDefaultValue(0)'然后'b.map(a).sum'。更清洁xD –

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

好吧......如果你知道数值与元素位置相同,你也可以问高斯:'(list.size *(list.size + 1))/ 2' ;-) – Flurin

+0

很确实,谢谢! –

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