Scala 2.12在这里,是Scala的新手.我得到一个Array[Double]
代表我本地系统上所有逻辑处理器的CPU负载(%):
val logicalProcessorLoads : Array[Double] = cpu.getProcessorCpuLoadBetweenTicks
Run Code Online (Sandbox Code Playgroud)
出于这个问题,逻辑处理器的数量是机器上物理处理器或"核心"数量的2倍.
所以在四核机器上,会有8个逻辑处理器,所以这个logicalProcessorLoads
数组在任何时间点的值都可能是这样的:
[12.4,2.2,10.0,5.0,23.7,18.9,1.1,11.2]
因此,要在任何给定时间点获得所有4个内核的CPU负载,需要我遍历这个8项数组并将每个后续元素对添加到一起,因此:
我试图找到最简洁+干净的方式在我的阵列上进行这种成对添加,其中输出为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))
}
}
Run Code Online (Sandbox Code Playgroud)
但这看起来有点令人费解,我相信Scala有一些魔力可以帮助我.有任何想法吗?
使用grouped
有map
:
logicalProcessorLoads.grouped(2).map(_.sum).toList
Run Code Online (Sandbox Code Playgroud)
得到:
List(
14.600000000000001,
15.0,
42.599999999999994,
12.299999999999999
)
Run Code Online (Sandbox Code Playgroud)
要更好地理解它,请查看返回的中间结果grouped(2)
:
List(
List(12.4, 2.2),
List(10.0, 5.0),
List(23.7, 18.9),
List(1.1, 11.2)
)
Run Code Online (Sandbox Code Playgroud)
这些正是手动生成的表中行的加数.
归档时间: |
|
查看次数: |
54 次 |
最近记录: |