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/

10-14 10:28