私は文字列のリストを持っていて、リスト内の各文字列の数値を知っていれば、リストの合計をどのように取得できますか?Scalaのリストの合計を求める
例:
私が知っている:合計7を計算する
List("a","b","d")
何最善の方法:
a = 1
b = 2
c = 3
d = 4
e = 5
Iは、以下のリストを与えられたのですか?あなたは値が要素の位置と同じであることを知っているならば、あなたはマップを避けることができ
おかげ
私は文字列のリストを持っていて、リスト内の各文字列の数値を知っていれば、リストの合計をどのように取得できますか?Scalaのリストの合計を求める
例:
私が知っている:合計7を計算する
List("a","b","d")
何最善の方法:
a = 1
b = 2
c = 3
d = 4
e = 5
Iは、以下のリストを与えられたのですか?あなたは値が要素の位置と同じであることを知っているならば、あなたはマップを避けることができ
おかげ
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
完璧です。ありがとう! – Bazzoner
'Map()。withDefaultValue(0)'と 'b.map(a).sum'を行うこともできます。もっとクリーナーxD –
:
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
まあ...値が要素位置と同じであることを知っているなら、Gaussにも問い合わせることができます: '(list.size *(list.size + 1))/ 2' ;-) – Flurin
非常に、ありがとう! –
あなたはそれが文字だけだ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
あなたはキーのリストを受け取り、 ''地図[文字列、INT]のように、彼らの合計を返す関数をしたいですか?あなたは十分な情報を提供していません。リスト内の文字列は複数回繰り返すことができますか? –
はい、Map [String、Int]を作成してから.foldLeft(0)(_ + _。2)を実行することを考えていましたが、リストからマップに変換するのが難しいです。はい、文字列は複数回繰り返すことができます。ありがとう – Bazzoner