以成对方式添加Scala数组的元素
这里是Scala 2.12,也是Scala的新功能。我得到一个以成对方式添加Scala数组的元素,scala,Scala,这里是Scala 2.12,也是Scala的新功能。我得到一个数组[Double],它表示本地系统上所有逻辑处理器的CPU负载(%): val logicalProcessorLoads : Array[Double] = cpu.getProcessorCpuLoadBetweenTicks 对于这个问题,逻辑处理器的数量是机器上物理处理器或“核心”数量的2倍 因此,在四核机器上,将有8个逻辑处理器,因此此logicalProcessorLoads阵列在任何时间点的值可能如下所示: [12.
数组[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%
percorloads: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))
}
}
var percorloads:Array[Double]=Array()
对于((lpl,i)使用分组和映射:
logicalProcessorLoads.grouped(2).map(_.sum).toList
logicalProcessorLoads.sliding(2, 2).map(_.sum).toList
给出:
List(
14.600000000000001,
15.0,
42.599999999999994,
12.299999999999999
)
List(
14.600000000000001,
15.0,
42.599999999999994,
12.299999999999999
)
List(
14.600000000000001,
15.0,
42.599999999999994,
12.299999999999999
)
为了更好地理解它,请查看分组(2)
返回的中间结果:
这些正是手动生成表中各行的总和。使用地图方法滑动
@andrey tyukin答案的另一种选择是使用滑动和地图:
logicalProcessorLoads.grouped(2).map(_.sum).toList
logicalProcessorLoads.sliding(2, 2).map(_.sum).toList
给出:
List(
14.600000000000001,
15.0,
42.599999999999994,
12.299999999999999
)
List(
14.600000000000001,
15.0,
42.599999999999994,
12.299999999999999
)
List(
14.600000000000001,
15.0,
42.599999999999994,
12.299999999999999
)
中间结果也将非常类似于分组,但是滑动
和分组
是非常不同的。滑动也将适合此用例
滑动方法(对您的示例略加说明):
val perCoreLoads = for {
lpl <- logicalProcessorLoads.sliding(2, 2)
} yield lpl(0) + lpl(1)
println(perCoreLoads.toList)
噢,拉拉,喜欢它!谢谢!你zipWithIndex
,然后你模式匹配i
,然后你就再也不用i
。那么zipWithIndex
和i
有什么意义呢?而且,分组
和滑动
是密切相关的,看起来像分组(n)
可以定义为滑动的一种特殊情况,即滑动(n,n)
。