Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell阵列阵列_Powershell_Multidimensional Array - Fatal编程技术网

Powershell阵列阵列

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构建到一个长的一维数组中,而不是数组数组中。我需要它是一个填充了$subret对象的数组。谢谢

$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
要糟糕得多。能给我来一杯哈利路哈吗?使用元组进行编程是很糟糕的,这使得其他人更难理解代码中的内容。这在我的代码中提供了正确的结果。我不知道为什么它不会以另一种方式工作。感谢全面的讨论,并为我问题的措辞可能引起的任何混乱向所有人道歉。我真的很感激你们能让我明白这一点。