我在 scala 中有陣列包含字串專案,每個專案都包含來自前綴 || 雙重值,如下所示:
var y = Array("Zara||6.0", "Nuha||4.0","Zara||2.0","Zara||0.1")
我想做的事 :
我需要對上面陣列中的所有雙精度值求和 (y(i).split("\|\|")(1)) 但如果前綴在陣列中重復,那么我只想要對最大值求和,如下所示: Zara 我們有 3 個值,我想為 Nuha 專案取最大值(在我們的示例中為 6.0),它是唯一的,然后我將取其值(4.0)
例外的輸出是(6.0 4.0)=10.0
有什么方法可以在 scala 中而不是使用 2 而不是回圈?
uj5u.com熱心網友回復:
準備您的陣列:將前綴和值提取到元組中。使用foldLeft為每個前綴聚合最大元素,并求和值
val res = y.map(_.split("\\|\\|")).map(arr => (arr(0), arr(1).toDouble))
.foldLeft(Map.empty[String, Double]) { (acc, elem) =>
val value = acc.get(elem._1).map(math.max(_, elem._2)).getOrElse(elem._2)
acc (elem._1 -> value)
}.values.sum
println(res)
uj5u.com熱心網友回復:
您幾乎可以一步完成(從技術上講,它是三個步驟,但只有一個專門滿足您的要求,其他一切(拆分和求和)都是一種給定的方式。
y
.iterator
.map(_.split("""\|\|"""))
.groupMapReduce(_.head)(_.last.toDouble)(_ max _)
.values
.sum
另外...不要使用 vars。即使你只是把一個快速的樣本放在一起。變數是邪惡的,只是假裝它們根本不存在......至少在一段時間內,直到你掌握了足夠的語言命令,能夠分辨出你可能真正需要它們的 1% 的情況。實際上,Array也盡可能避免使用 s 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/493053.html
