在Windows PowerShell博客上阅读this helpful article后,我意识到我可以“转移”#34;关闭阵列的第一部分,但不知道如何"取消移动"或者在PowerShell中将元素推送到数组的前面。
我正在创建一个哈希对象数组,最后一个读取项首先被推送到数组。我想知道是否有更好的方法来实现这一目标。
## Create a list of files for this collection, pushing item on top of all other items
if ($csvfiles[$collname]) {
$csvfiles[$collname] = @{ repdate = $date; fileobj = $csv }, $csvfiles[$collname] | %{$_}
}
else {
$csvfiles[$collname] = @{ repdate = $date; fileobj = $csv }
}
有几点需要注意:
思想?
PS:空哈希元素产生NULL值的原因是$ null被视为PowerShell中的标量。有关详细信息,请参阅https://connect.microsoft.com/PowerShell/feedback/details/281908/foreach-should-not-execute-the-loop-body-for-a-scalar-value-of-null。
解答:
看起来最好的解决方案是在必要时预先创建空数组,而不是围绕$ null问题编写代码。这里是使用.NET ArrayList和本机PoSh数组重写的。
if (!$csvfiles.ContainsKey($collname)) {
$csvfiles[$collname] = [System.Collections.ArrayList]@()
}
$csvfiles[$collname].insert(0, @{ repdate = $repdate; fileobj = $csv })
## NATIVE POSH SOLUTION...
if (!$csvfiles.ContainsKey($collname)) {
$csvfiles[$collname] = @()
}
$csvfiles[$collname] = @{ repdate = $repdate; fileobj = $csv }, `
$csvfiles[$collname] | %{$_}
答案 0 :(得分:4)
您可能希望使用ArrayList个对象,因为它们支持在任意位置插入。例如:
# C:\> $a = [System.Collections.ArrayList]@(1,2,3,4)
# C:\> $a.insert(0,6)
# C:\> $a
6
1
2
3
4
答案 1 :(得分:3)
您可以简单地使用加号运算符:
$array = @('bar', 'baz')
$array = @('foo') + $array
注意:这种重新创建实际上是在创建一个新数组,而不是更改现有数组(但是您引用的$head, $tail = $array
移位方式也完全一样)。