保留哈希表顺序

Ste*_*e B 3 powershell

假设我有这个脚本:

$data= @{
    A = 1
    C = 2
    B = 3
}

foreach($key in $data.Keys){
    $item = $data[$key]
    Write-Host "$($key) : $($item)"
}
Run Code Online (Sandbox Code Playgroud)

输出是:

C : 2
B : 3
A : 1
Run Code Online (Sandbox Code Playgroud)

如您所见,输出与输入的顺序不同.

有没有办法保存我的字典中的顺序?

我的实际要求是按字典中提供的顺序执行一组命令.

作为旁注,我可以使用以下方法解决:

$data= @(
  @{ Name="A"; Value=1  }
  @{ Name="C"; Value=2  }
  @{ Name="B"; Value=3  }
)

foreach($item in $data){
    Write-Host "$($item.Name) : $($item.Value)"
}
Run Code Online (Sandbox Code Playgroud)

但语法有点复杂

alr*_*roc 7

需要PowerShell 3,但您可以使用[ordered]加速器来保持秩序.

$data= [ordered]@{
    A = 1
    C = 2
    B = 3
}
Run Code Online (Sandbox Code Playgroud)