【问题标题】:Adding objects to an array in a hashtable将对象添加到哈希表中的数组
【发布时间】:2017-09-20 09:26:36
【问题描述】:

我想创建一个 Hashtable,它将具有相同名称的文件分组到数组中,以便稍后我可以使用它们列出这些文件的一些属性,例如存储它们的文件夹。

$ht = @{}
gci -recurse -file | % {
    try{
        $ht.Add($_.Name,@())
        $ht[$_.Name] += $_
    }
    catch{
        $ht[$_.Name] += $_
    }
}

我得到的只是:

Index operation failed; the array index evaluated to null.
At line:8 char:13
+             $ht[$_.Name] += $_
+             ~~~~~~~~~~~~~~~~~~

我不确定为什么这不起作用,我将不胜感激。

【问题讨论】:

  • if ($ht[$_.name]) { $ht[$_.name] += $_ } else { $ht[$_.name] = ,$_ }

标签: arrays powershell object hashtable


【解决方案1】:

不要重新发明轮子。你想分组同名文件,使用Group-Object cmdlet:

$groupedFiles = Get-ChildItem -recurse -file | Group-Object Name

现在您可以使用Where-Object cmdlet 轻松检索至少出现两次的所有文件名:

$groupedFiles | Where-Object Count -gt 1

您收到此错误是因为如果您的代码遇到 catch 块,则当前管道变量 ($_) 表示 最后一个错误不是 当前物品。您可以通过将当前项目存储为变量来解决此问题,或者使用 -PipelineVariable 高级 cmdlet 参数:

$ht = @{}
gci -recurse -file -PipelineVariable item | %  {
    try{
        $ht.Add($item.Name,@())
        $ht[$item.Name] += $item
    }
    catch{
        $ht[$item.Name] += $item
    }
}

【讨论】:

    猜你喜欢
    • 2016-11-18
    • 2011-07-26
    • 2020-06-30
    • 1970-01-01
    • 2012-09-03
    • 2018-04-21
    • 1970-01-01
    • 2012-03-13
    • 2016-09-03
    相关资源
    最近更新 更多