Si j'ai une liste de chaînes et que je connais la valeur numérique de chaque chaîne de la liste, comment obtenir la somme de la liste?

Exemple:

Je sais:

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

On me donne la liste suivante:

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

Quelle est la meilleure façon de calculer la somme 7?

Merci

2
Bazzoner 20 avril 2017 à 16:57

3 réponses

Meilleure réponse
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
7
sheunis 20 avril 2017 à 14:03

Si vous savez que les valeurs sont les mêmes que la position de l'élément, vous pouvez éviter une carte:

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
0
Emiliano Conde 20 avril 2017 à 17:27

Si vous êtes sûr à 100% que ce ne sont que des lettres

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

Sinon, vous pouvez le mapper avant

val letters = (1 to 26).map(x => Character.toString((x+96).toChar) -> x).toMap

Et utilisez la réponse de @ sheunis:

val input = List("a","b","d")
input.map(letters.getOrElse(_, 0)).sum
0
Danny Mor 25 avril 2017 à 07:44