PowerShell 3.0 CTP1 引入了一个新功能 [ordered]
,它有点像 OrderedDictionary
的快捷方式。我无法想象它的实际用例。为什么这个功能真的很有用?有人可以提供一些有用的例子吗?
示例:恕我直言,这是演示案例而不是实际案例:
$a = [ordered]@{a=1;b=2;d=3;c=4}
(我不介意它是否仍然有用,那么我只是在寻找其他有用的案例)。
我不是在寻找
OrderedDictionary
的用例,它确实很有用。但是我们可以在 v2.0 中直接使用它(我做了很多)。我试图理解为什么还需要这个新功能 [ordered]
。从答案中收集的用例:
$hash = [ordered]@{}
短于
$hash = New-Object System.Collections.Specialized.OrderedDictionary
注意
ordered
不是该类型的真正快捷方式。 New-Object ordered
不起作用。注意2:但这仍然是一个很好的捷径,因为(我认为,不能尝试)它为 PowerShell 不区分大小写的字典创建了典型。 v2.0 中的等效命令太长了,确实:
New-Object System.Collections.Specialized.OrderedDictionary]([System.StringComparer]::OrdinalIgnoreCase)
最佳答案
首先我会问 - 为什么不拥有它们?
我可以在我的项目中想到一个用例,我们使用 Powershell 脚本进行构建和部署,使用 yml 进行配置(使用 https://github.com/scottmuc/PowerYaml)
来自 yml 的配置作为哈希表读入。任务在 yml 中指定,如部署到数据库、部署到 iis、部署服务等。我想做数据库部署,然后网站部署,这样我就可以避免 iisreset 之后。目前我必须明确地看待这一点。现在,我可以有一个 Ordered 哈希表并首先指定部署数据库,因此它首先发生。
片段:
function Convert-YamlMappingNodeToHash($node)
{
$hash = @{}
$yamlNodes = $node.Children
foreach($key in $yamlNodes.Keys)
{
$hash[$key.Value] = Explode-Node $yamlNodes[$key]
}
return $hash
}
现在
$hash =@{}
变成了 $hash=[ordered]@{}
我不知道这对臃肿的产品意味着什么。 OrderedDictionary 存在于 .NET 中(我在编程中有很多用例),他们刚刚为它添加了一个加速器。
关于powershell - [ordered] 的用例,新的 PowerShell 3.0 功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7802406/