如何将PowerShell数组均分为5个长度尽可能相等的子数组?
PowerShell数组均分实现
针对你需要将数组分割为指定数量、长度尽可能相等的子数组的需求,这里提供一个可靠的实现,解决你之前遇到的分割不均、元素重复问题:
$MainArray = @(1,2,3,4,5,6,7,8,9,10,11) $targetSplitCount = 5 # 计算基础子数组长度和剩余元素数 $baseLength = [math]::Floor($MainArray.Count / $targetSplitCount) $extraElements = $MainArray.Count % $targetSplitCount $splitResult = @() $currentPosition = 0 # 循环生成每个子数组 for ($i = 0; $i -lt $targetSplitCount; $i++) { # 前extraElements个子数组多分配一个元素 $currentLength = $baseLength + ($i -lt $extraElements ? 1 : 0) # 切片截取子数组,逗号确保添加的是数组而非展开元素 $splitResult += ,$MainArray[$currentPosition..($currentPosition + $currentLength - 1)] # 更新当前位置 $currentPosition += $currentLength } # 验证输出 $splitResult | ForEach-Object { Write-Host "子数组元素: $($_ -join ', ')" }
逻辑说明
- 基础长度与余数计算:总元素数除以目标分割数得到基础长度,余数就是需要多分配一个元素的子数组数量(示例中11÷5余1,所以1个子数组长度为3,其余4个为2)
- 逐段截取:通过索引切片精准截取对应长度的子数组,避免重复或遗漏
- 数组引用保留:使用
,$MainArray[...]确保将子数组作为整体添加到结果数组中,而不是将元素逐个展开
输出结果
运行后会得到你期望的结构:
- 子数组元素: 1, 2, 3
- 子数组元素: 4, 5
- 子数组元素: 6, 7
- 子数组元素: 8, 9
- 子数组元素: 10, 11
内容的提问来源于stack exchange,提问作者pacokent
相关产品推荐
相关产品推荐

