Powershell阵列阵列
这是将$ret构建到一个长的一维数组中,而不是数组数组中。我需要它是一个填充了$subret对象的数组。谢谢Powershell阵列阵列,powershell,multidimensional-array,Powershell,Multidimensional Array,这是将$ret构建到一个长的一维数组中,而不是数组数组中。我需要它是一个填充了$subret对象的数组。谢谢 $ret = @() foreach ($item in $items){ $subret = @() $subRet = $item.Name , $item.Value $ret += $subret } 可能还有其他方法,但arraylist通常对我有效,在这种情况下,我会: $ret = New-Object System.Collections.ArrayLis
$ret = @()
foreach ($item in $items){
$subret = @()
$subRet = $item.Name , $item.Value
$ret += $subret
}
可能还有其他方法,但arraylist通常对我有效,在这种情况下,我会:
$ret = New-Object System.Collections.ArrayList
然后
$ret.add($subret)
编辑
创建元组数组比用包含名称
值
作为两个属性的PSObject填充数组更复杂
从$item
中选择所需的属性,然后将它们添加到数组中
$item = $item | select Name, Value
$arr = @()
$arr += $item
通过执行以下操作,可以引用此数组中的值
foreach($obj in $arr)
{
$name = $obj.Name
$value = $obj.Value
# Do actions with the values
}
先前存在的可疑重复问题实际上是重复的: 假设
+
使用数组作为LHS连接数组,则必须使用一元形式的,
(数组构造运算符)嵌套RHS,如果它是应作为单个元素添加的数组:
# Sample input
$items = [pscustomobject] @{ Name = 'n1'; Value = 'v1'},
[pscustomobject] @{ Name = 'n2'; Value = 'v2'}
$ret = @() # create an empty *array*
foreach ($item in $items) {
$subret = $item.Name, $item.Value # use of "," implicitly creates an array
$ret += , $subret # unary "," creates a 1-item array
}
# Show result
$ret.Count; '---'; $ret[0]; '---'; $ret[1]
这将产生:
2
---
n1
v1
---
n2
v2
使用[System.Collections.ArrayList]
及其.Add()
方法的原因也很有效-在构建大型阵列时通常更可取的方法是.Add()
只接受单个对象作为要添加的项,无论该对象是标量还是数组:
# Sample input
$items = [pscustomobject] @{ Name = 'n1'; Value = 'v1'},
[pscustomobject] @{ Name = 'n2'; Value = 'v2'}
$ret = New-Object System.Collections.ArrayList # create an *array list*
foreach ($item in $items) {
$subret = $item.Name, $item.Value
# .Add() appends whatever object you pass it - even an array - as a *single* element.
# Note the need for $null = to suppress output of .Add()'s return value.
$null = $ret.Add($subret)
}
# Produce sample output
$ret.Count; '---'; $ret[0]; '---'; $ret[1]
输出与上面相同。我看到了那个,并尝试使用+=@($subret),但仍然不起作用。“我看到了那个,并尝试使用+=@($subret),但仍然不起作用。”-现在尝试使用答案实际建议的内容,答案并不是这样——答案甚至解释了额外的逗号,以及为什么有必要@TessellatingHeckler不需要讽刺或质问——是的,也用前面的逗号进行了测试@科洛布可能是。我需要一个数组,其中每个单元格包含2个单元格(名称、值)。对我来说,这听起来像是一个数组数组,但也许我遗漏了一些东西。除了讽刺之外,@tessellingheckler是正确的:
$ret+=,$subret
解决了问题。我将标记为上一篇文章解决的问题。谢谢。这将返回名称-值-名称-值ETC的长一维数组。更准确地说,它创建了一个包含[pscustomobject]
实例的一维数组,每个实例都有.Name
和.Value
属性-这与要求的非常不同,这是一个一维数组,每个数组有2个元素,它们的值是输入项“代码>的值。名称< /代码>和<代码>。值属性。此外,OP也没有寻找关联数组。考虑到你的解决方案与要求的不同,我认为这是一种干扰——除非你添加一个免责声明,并解释为什么你的不同方法更可取(这不容易做到,因为我们不知道OP询问他们要求什么的原因)。@mklement0我不明白?OP要求使用带有对象的一维数组?下面引用他的问题:我需要它是一个填充了$subret对象的数组
。在这种情况下,他可能并不想要一个元组。。。如果需要名称,则必须通过执行$arr[0][0]
来引用,这比执行$arr[0].name
要糟糕得多。能给我来一杯哈利路哈吗?使用元组进行编程是很糟糕的,这使得其他人更难理解代码中的内容。这在我的代码中提供了正确的结果。我不知道为什么它不会以另一种方式工作。感谢全面的讨论,并为我问题的措辞可能引起的任何混乱向所有人道歉。我真的很感激你们能让我明白这一点。