根据值拆分数组

时间:2018-06-20 10:11:14

标签: powershell

这是我在这里的第一个问题,对不起,如果在发布此消息时遇到任何错误。

我正在尝试根据其值拆分数组。基本上,我想创建两个数组,其值尽可能接近平均值。我设法用以下代码做到了这一点:

function Sum($v) {
    [Linq.Enumerable]::Sum([int64[]]$v)
}

$arr = 0..9 | % {get-random -min 1 -max 10}
"ARRAY:" + $arr
"SUM: " + (sum $arr)
"AVG: " + (sum $arr)/2

# start of the code that matters
$wavg = (sum $arr)/2
foreach ($i in (0..($arr.Count-1))) {
    $wavg -= $arr[$i]
    if ($wavg -le 0) {
        $i-=(-$wavg -gt $arr[$i]/2);break
    }
}

"SPLIT INDEX: " + $i
"ARR1: " + $arr[0..$i] + " (" + $(sum $arr[0..$i]) + ")"
"ARR2: " + $arr[($i+1)..$arr.Count] + " (" + $(sum $arr[($i+1)..$arr.Count]) + ")"

我的foreach这样构成的原因是,在我的实际代码中,值位于索引哈希中,并且可以作为$index[$arr[$i]]进行访问。

这意味着生成的两个数组的大小可能不相等(如果将数组分成两半,这很容易)。我的代码示例输出来证明这一点:

ARRAY: 5 3 6 3 2 3 6 3 1 3
SUM: 35
AVG: 17.5
SPLIT INDEX: 3
ARR1: 5 3 6 3 (17)
ARR2: 2 3 6 3 1 3 (18)

代码按原样工作,但我认为可以用更优雅,更快捷的方式来完成。因为我需要在脚本中执行数千次此代码,所以我希望它尽可能快。

0 个答案:

没有答案