【发布时间】:2017-12-13 12:39:08
【问题描述】:
描述:我正在构建一个搜索文件的 PowerShell 脚本,然后给它们提供唯一的名称,复制它们,然后通过哈希计算验证它们 - 我选择将脚本拆分为函数每个步骤,因此更容易维护整个事情。
为了将所有值从一个函数传递到另一个函数,我选择使用[hashtable]$FooBar - 在$FooBar 内部,有多个数组,例如FullName 或OutputPath(每个文件可能会更改,因为它们将被复制到名为yyyy-mm-dd 的子文件夹)。所有数组都相互关联(这意味着索引 1 包含第一个文件的所有值,索引 2 包含第二个文件的值,...),到目前为止,这工作正常。
一个简短的简化可视化:
$FooBar = @{}
$FooBar.FullName = @()
$FooBar.Size = @()
$FooBar.Ext = @()
Get-ChildItem | ForEach-Object {
$FooBar.FullName += $_.FullName
$FooBar.Size += $_.Length
$FooBar.Ext += $_.Extension
}
但是,我现在需要按其中一个数组的一个值集对它们进行排序,例如规模。或者,再次可视化:
# From:
$FooBar
Name Value
---- -----
fullname {D:\AAA.XYZ, D:\BBB.ZYX, D:\CCC.YZX}
size {222, 111, 555}
extension {.XYZ, .ZYX, .YZX}
# To:
$FooBar = $FooBar | Sort-Object -Property Size -Descending
$FooBar
Name Value
---- -----
fullname {D:\CCC.YZX, D:\AAA.XYZ, D:\BBB.ZYX}
size {555, 222, 111}
extension {.YZX, .XYZ, .ZYX}
我试过$FooBar.GetEnumerator() | Sort-Object -Property Size,但这并没有改变任何东西。 Google 提出了有关如何对一组哈希表进行排序的建议,但在我的情况下,情况正好相反,我无法理解这一点,因为 我什至不明白为什么这是一个问题第一名。
所以我的问题是:有没有办法通过其中一个数组的值集对哈希表中的所有数组进行排序?我无法理解这一点。
免责声明:我是一名 PowerShell 自学者,在脚本/编程方面没有合理的背景,所以我的“将所有内容包含在一个哈希表中”的解决方案很可能行不通完全没有,或者可能效率极低 - 如果是这样,请告诉我。
【问题讨论】:
-
为什么不将所有
FileInfo对象存储在一个数组中? -
嗯,我猜原因归结为 a) 缺乏经验和 b) 预期的易用性(见a))。我也没有对我的问题表达这种共鸣。我坐在这里试图理解/完全理解(并以测试方式实施)每一个建议,以便我可以相应地选择/投票 - 据我所知,你们似乎都比我更了解我的问题做 ;-) 。这个社区简直太棒了!
标签: arrays powershell sorting hashtable powershell-5.0