gpt4 book ai didi

scala - 以成对方式添加 Scala 数组的元素

转载 作者:行者123 更新时间:2023-12-04 17:54:18 26 4
gpt4 key购买 nike

这里是 Scala 2.12,是 Scala 的新手。我得到一个 Array[Double],它表示我本地系统上所有逻辑处理器的 CPU 负载 (%):

val logicalProcessorLoads : Array[Double] = cpu.getProcessorCpuLoadBetweenTicks

对于这个问题,逻辑处理器的数量是机器上物理处理器或“核心”数量的 2 倍。

所以在四核机器上,会有 8 个逻辑处理器,所以这个 logicalProcessorLoads 数组在任何时间点的值可能是这样的:

[ 12.4, 2.2, 10.0, 5.0, 23.7, 18.9, 1.1, 11.2 ]

因此,要在任何给定时间点获得所有 4 个核心 的 CPU 负载,我需要遍历这个 8 项数组并将每个后续元素对加在一起,因此:

  • 核心 #1 CPU 负载为 12.4 + 2.2 = 14.6%
  • 核心 #2 CPU 负载为 10.0 + 5.0 = 15.0%
  • 核心 #3 CPU 负载为 23.7 + 18.9 = 42.6%
  • 核心 #4 CPU 负载为 1.1 + 11.2 = 12.3%

等我试图找到在我的数组上进行这种成对加法的最简洁 + 干净的方法,输出是 perCoreLoads : Array[Double] 其中有 4 个元素,每个元素代表我的 4 个核心中的每一个的负载。到目前为止我最好的尝试:

var perCoreLoads : Array[Double] = Array()
for((lpl,i) <- logicalProcessorLoads.zipWithIndex) {
if(i+1 <= logicalProcessorLoads.size - 1) {
perCoreLoads :+ (lpl(i) + lpl(i+1))
}
}

但这似乎有点令人费解,我相信 Scala 有一些神奇的力量可以帮助我解决这个问题。有什么想法吗?

最佳答案

groupedmap一起使用:

logicalProcessorLoads.grouped(2).map(_.sum).toList

给出:

List(
14.600000000000001,
15.0,
42.599999999999994,
12.299999999999999
)

为了更好地理解它,请查看 grouped(2) 返回的中间结果:

List(
List(12.4, 2.2),
List(10.0, 5.0),
List(23.7, 18.9),
List(1.1, 11.2)
)

这些正是您手动生成的表格中行的加数。

关于scala - 以成对方式添加 Scala 数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50395817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com