You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中如何排序数组避免同类主机名连续排列?

在PowerShell中实现主机名交错排序(避免同类连续)

完全可以实现这类交错排序效果,核心思路是先按主机名前缀分组,再对各组内元素排序,最后交错合并各组元素。以下是具体实现步骤:

1. 定义原始主机名数组

$hostnames = @(
    'DSERVER01',
    'DSERVER02',
    'PSERVER03',
    'PSERVER04',
    'DSERVER05',
    'PSERVER01'
)

2. 按主机名前缀分组

通过正则提取主机名的字母前缀(比如DSERVER、PSERVER),以此作为分组依据:

$groups = $hostnames | Group-Object -Property { $_ -replace '\d+$', '' }

如果你的主机名前缀规则不同(比如固定长度前缀),可以修改分组逻辑,比如取前6个字符:$_[0..5] -join ''

3. 对每组内的主机名排序

按主机名后的数字部分进行排序,保证每组内的元素是有序的:

$sortedGroups = $groups | ForEach-Object {
    $_.Group | Sort-Object { [int]($_ -replace '^\D+', '') }
}

若不需要组内排序,可直接跳过此步骤。

4. 交错合并各组元素

循环依次从每个组中取出对应位置的元素,实现交错排列:

$result = @()
# 获取元素最多的组的长度
$maxCount = $sortedGroups | Measure-Object -Property Count -Maximum | Select-Object -ExpandProperty Maximum

for ($i = 0; $i -lt $maxCount; $i++) {
    foreach ($group in $sortedGroups) {
        if ($i -lt $group.Count) {
            $result += $group[$i]
        }
    }
}

# 输出结果
$result

执行上述代码后,输出结果会类似:

DSERVER01
PSERVER01
DSERVER02
PSERVER03
DSERVER05
PSERVER04

如果某一组的元素数量远多于其他组,剩余的元素会接在结果末尾,但不会出现连续同类的情况(除非只剩一组元素),可根据实际场景调整合并逻辑。

内容的提问来源于stack exchange,提问作者ITPRO85

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 00:40:02