加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 09:04:39 所属栏目:安全 来源:网络整理
导读:Scala 2.12在这里,是 Scala的新手.我得到一个Array [Double],表示我本地系统上所有逻辑处理器的CPU负载(%): val logicalProcessorLoads : Array[Double] = cpu.getProcessorCpuLoadBetweenTicks 出于这个问题,逻辑处理器的数量是机器上物理处理器或“核心
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有一些魔力可以帮助我.有任何想法吗?

解决方法

使用与地图分组:

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

得到:

List(
  14.600000000000001,15.0,42.599999999999994,12.299999999999999
)

要更好地理解它,请查看由groups(2)返回的中间结果:

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

这些正是手动生成的表中行的加数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读