Powershell数组数组

时间:2017-06-23 19:25:37

标签: powershell multidimensional-array

这是建立$ ret到一个长的1维数组而不是数组数组。我需要它是一个用$ subret对象填充的数组。感谢。

//ACTUPT EXEC PGM=*.FINANCE.ACCTREC.UPDATE,
//          REGION=1M,TIME=(,6),COND=(0,EQ,VALIDATE)

3 个答案:

答案 0 :(得分:1)

可能还有其他方法,但是arraylist通常适合我,在这种情况下我会这样做:

$ret  = New-Object System.Collections.ArrayList

然后

$ret.add($subret)

答案 1 :(得分:1)

修改

创建一个元组数组比使用包含Name Value的PsObjects作为两个属性填充数组更复杂。

$item中选择所需的属性,然后将它们添加到阵列

$item = $item | select Name, Value
$arr = @()
$arr += $item

您可以通过执行此操作来引用此数组中的值

foreach($obj in $arr)
{
      $name = $obj.Name
      $value = $obj.Value
      # Do actions with the values
}

答案 2 :(得分:1)

疑似预先存在的重复问题确实是重复的:

鉴于带有数组+作为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()方法的原因也是如此 - 在构建 large 时,这种方法通常更可取数组 - 是 .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]

输出与上述相同。