GridView 中具有多个值的哈希表
Hashtable with multiple values in GridView
我将数据存储在具有多个值的哈希表中,如下所示:
$hash = @{}
$folders = dir (...) | where (...)
foreach ($folder in $folders) {
$num1 = (...)
$num2 = (...)
$hash.Add($folder.Name,@($num1,$num2))
}
所以这是一个哈希,其值部分包含一个数组。该数组总是有两个项目。完成 foreach
部分后,我想用 Out-GridView
显示数据,如下所示:
$hash | select -Property @{Expression={$_.Name};Label="FolderName"},
@{Expression={$_.Name[0]};Label="num1"},
@{Expression={$_.Name[1]};Label="num2"} | Out-GridView
但是正如您想象的那样,这是行不通的。如何将散列的值部分中的存储数组拆分为两个新列,以便在 GridView 中将它们显示在总共三列中?
应该是名称、值 1、值 2 ...
然后将多个项目作为多行存储在哈希表中。
哈希表不是具有 Name
和 Value
属性 的对象列表。这就是 PowerShell 为方便起见显示数据结构的方式。要按照您尝试的方式处理哈希表,您需要一个枚举器来生成此类对象:
$hash.GetEnumerator() |
Select-Object @{n='FolderName';e={$_.Name}},
@{n='num1';e={$_.Value[0]}},
@{n='num2';e={$_.Value[1]}} |
Out-GridView
或者你可以枚举哈希表的键,将它们作为管道中的当前对象,并通过各自的键和索引查找值:
$hash.Keys |
Select-Object @{n='FolderName';e={$_}},
@{n='num1';e={$hash[$_][0]}},
@{n='num2';e={$hash[$_][1]}} |
Out-GridView
如果您事先不知道数组元素的数量,则需要一个内部循环来处理嵌套数组,例如像这样:
$hash.Keys | ForEach-Object {
$o = New-Object -Type PSObject -Property @{ 'FolderName' = $_ }
$a = $hash[$_]
for ($i = 1; $i -le $a.Count; $i++) {
$o | Add-Member -Type NoteProperty -Name "num$i" -Value $a[$i-1]
}
$o
} | Out-GridView
如果您有可变数量的数组元素,请注意 PowerShell 由第一个对象决定将显示哪些属性。
我将数据存储在具有多个值的哈希表中,如下所示:
$hash = @{}
$folders = dir (...) | where (...)
foreach ($folder in $folders) {
$num1 = (...)
$num2 = (...)
$hash.Add($folder.Name,@($num1,$num2))
}
所以这是一个哈希,其值部分包含一个数组。该数组总是有两个项目。完成 foreach
部分后,我想用 Out-GridView
显示数据,如下所示:
$hash | select -Property @{Expression={$_.Name};Label="FolderName"},
@{Expression={$_.Name[0]};Label="num1"},
@{Expression={$_.Name[1]};Label="num2"} | Out-GridView
但是正如您想象的那样,这是行不通的。如何将散列的值部分中的存储数组拆分为两个新列,以便在 GridView 中将它们显示在总共三列中?
应该是名称、值 1、值 2 ...
然后将多个项目作为多行存储在哈希表中。
哈希表不是具有 Name
和 Value
属性 的对象列表。这就是 PowerShell 为方便起见显示数据结构的方式。要按照您尝试的方式处理哈希表,您需要一个枚举器来生成此类对象:
$hash.GetEnumerator() |
Select-Object @{n='FolderName';e={$_.Name}},
@{n='num1';e={$_.Value[0]}},
@{n='num2';e={$_.Value[1]}} |
Out-GridView
或者你可以枚举哈希表的键,将它们作为管道中的当前对象,并通过各自的键和索引查找值:
$hash.Keys |
Select-Object @{n='FolderName';e={$_}},
@{n='num1';e={$hash[$_][0]}},
@{n='num2';e={$hash[$_][1]}} |
Out-GridView
如果您事先不知道数组元素的数量,则需要一个内部循环来处理嵌套数组,例如像这样:
$hash.Keys | ForEach-Object {
$o = New-Object -Type PSObject -Property @{ 'FolderName' = $_ }
$a = $hash[$_]
for ($i = 1; $i -le $a.Count; $i++) {
$o | Add-Member -Type NoteProperty -Name "num$i" -Value $a[$i-1]
}
$o
} | Out-GridView
如果您有可变数量的数组元素,请注意 PowerShell 由第一个对象决定将显示哪些属性。