如果我有一個字符串列表,並且我知道列表中每個字符串的數字值,我該如何獲得列表的總和?查找Scala中的列表總和
例子:
我知道:
a = 1
b = 2
c = 3
d = 4
e = 5
我給出以下列表:
List("a","b","d")
什麼計算的總和7的最佳方式?
感謝
如果我有一個字符串列表,並且我知道列表中每個字符串的數字值,我該如何獲得列表的總和?查找Scala中的列表總和
例子:
我知道:
a = 1
b = 2
c = 3
d = 4
e = 5
我給出以下列表:
List("a","b","d")
什麼計算的總和7的最佳方式?
感謝
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
好吧......如果你知道數值與元素位置相同,你也可以問高斯:'(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