以成对方式添加Scala数组的元素
Scala 2.12在这里,是
Scala的新手.我得到一个Array [Double],表示我本地系统上所有逻辑处理器的CPU负载(%):
val logicalProcessorLoads : Array[Double] = cpu.getProcessorCpuLoadBetweenTicks 出于这个问题,逻辑处理器的数量是机器上物理处理器或“核心”数量的2倍. 因此,在四核机器上,将有8个逻辑处理器,因此任何时间点此logicalProcessorLoads数组的值可能类似于:
因此,要在任何给定时间点获得所有4个内核的CPU负载,需要我遍历这个8项数组并将每个后续元素对添加到一起,因此: >核心#1 CPU负载为12.4 2.2 = 14.6% 我试图在我的数组上找到最简洁的方法来进行这种成对添加,输出是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) ) 这些正是手动生成的表中行的加数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |