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

如何通过数字索引访问输入哈希表键并添加至输出哈希表?

问题解答:用Counter变量访问PowerShell哈希表的键

首先得明确一个关键知识点:PowerShell里默认的哈希表(@{}创建的System.Collections.Hashtable)是无序的,它的键顺序不固定,每次运行甚至操作后都可能变化,所以直接依赖数字位置去访问键是不可靠的。不过如果我们先把键转换成有序的数组,就可以用$counter变量来按位置访问啦!

接下来给你一步步拆解解决方案:

1. 先处理哈希表的有序性(可选但重要)

如果你需要固定的键顺序,别用普通哈希表,改用有序字典,用[ordered]@{}创建:

$htInput = [ordered]@{Alpha = 1; Bravo = 2; Charlie = 3; Delta = 4; Echo = 5}

如果只是临时遍历不关心顺序,普通哈希表也可以,但记住它的键顺序不保证稳定。

2. 把键提取到数组,实现索引访问

哈希表的Keys集合不能直接按数字索引访问,我们把它转成数组就可以了:

$keys = @($htInput.Keys)

现在$keys就是一个有序数组,$keys[0]就是第一个键,$keys[$counter]就能对应到循环中的位置。

3. 修正后的完整代码示例

这里我把你原来的代码补全并修正了(注意你原来的$htOutput = @()是数组,如果要输出哈希表应该用@{}):

$main = {
    Begin { 
        Write-Host "SO Question Begin..." -ForegroundColor Black -BackgroundColor Green 
    }
    Process {
        try {
            # 使用有序字典保证键的顺序固定
            $htInput = [ordered]@{Alpha = 1; Bravo = 2; Charlie = 3; Delta = 4; Echo = 5}
            
            # 将键转换为可索引的数组
            $keys = @($htInput.Keys)
            # 初始化输出哈希表(如果需要数组则保持@(),按需调整)
            $htOutput = @{}
            
            for ($counter = 0; $counter -lt $keys.Count; $counter++) {
                # 通过counter获取当前键
                $currentKey = $keys[$counter]
                # 通过键获取对应的值
                $currentValue = $htInput[$currentKey]
                
                # 将键值对添加到输出哈希表,这里可以根据需求修改逻辑
                $htOutput[$currentKey] = $currentValue
                
                # 可选:打印当前循环的内容,方便调试
                Write-Host "Counter $counter : Key = $currentKey, Value = $currentValue" -ForegroundColor Gray
            }
            
            # 输出最终的哈希表
            Write-Host "`nFinal Output Hashtable:" -ForegroundColor Cyan
            $htOutput
        }
        catch {
            Write-Error "An error occurred: $_"
        }
    }
}

# 执行脚本块
& $main

关键注意点

  • 如果你用普通哈希表(@{}),$keys的顺序可能每次运行都不一样,所以不要依赖这个顺序做业务逻辑。
  • 如果只是需要遍历所有键值对,其实用foreach ($key in $htInput.Keys)会更简洁,但如果必须用for循环加$counter,上面的方法完全可行。
  • 你原来的$htOutput = @()是创建数组,如果你的需求是输出数组(比如存键值对对象),可以改成:
    $htOutput = @()
    # 在循环里添加:
    $htOutput += [PSCustomObject]@{Key = $currentKey; Value = $currentValue}
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:32:46