2017-04-20 15 views
0

私は文字列のリストを持っていて、リスト内の各文字列の数値を知っていれば、リストの合計をどのように取得できますか?Scalaのリストの合計を求める

例:

私が知っている:合計7を計算する

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

何最善の方法:

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

Iは、以下のリストを与えられたのですか?あなたは値が要素の位置と同じであることを知っているならば、あなたはマップを避けることができ

おかげ

+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

まあ...値が要素位置と同じであることを知っているなら、Gaussにも問い合わせることができます: '(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 
関連する問題