2017-06-23 7 views
2

これは、配列の配列ではなく長い1次元配列に$ retを構築しています。 $ subretオブジェクトが配置された配列である必要があります。ありがとう。Powershell配列の配列

$ret = @() 
foreach ($item in $items){ 
    $subret = @() 
    $subRet = $item.Name , $item.Value 
    $ret += $subret 
} 
+0

私はそれを見て、+ = @($ subret)を使ってみましたが、まだ動作していません。 – klaypigeon

+1

"*私はそれを見て、+ = @($ subret)を使ってみましたがまだ動作していません*" - 答えが実際に示唆しているものを使ってみてください、それは答えではなく、必要があります – TessellatingHeckler

+0

@ TessellatingHecklerいいえ、皮肉かヘリングルが必要 - はいも先行のカンマでテストしました。 @Kolobすることができます。各セルに2つのセル(名前、値)が含まれている配列が必要です。それは私の配列の配列のように聞こえるが、多分私は何かを見逃している。 – klaypigeon

答えて

1

が、他の方法でもよいが、通常、私はどうしたらこのような場合には、私の作品ArrayListのかもしれません:

$ret = New-Object System.Collections.ArrayList 

、その後

$ret.add($subret) 
+0

これにより、私のコードで正しい結果が得られました。なぜそれが他の方法で動作しないのか分かりません。 – klaypigeon

1

編集

それは、Psで配列を塗りつぶすよりも、タプルの配列を作成するために複雑です2つの特性としてNameValueを含むオブジェクト。

確かに、あなたが疑われる既存の重複した質問この

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

これは返し 名前 値の名前の長い1次元配列 値など – klaypigeon

+0

より正確には、それは、それぞれ '.Name'と' .Value'を有する '[pscustomobject]'インスタンスの1次元配列を作成これは、入力項目の '.Name'と' .Value'プロパティの_values_である2つの要素を持つ入れ子配列の1次元配列です。 – mklement0

+0

@ mklement0技術的には、オブジェクトは連想配列と考えることができます。 –

1

を行うことによって、この配列内の値を参照することができ

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

配列に追加し、あなたが$itemから必要なプロパティを選択します重複:

この場合、+ar 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()のみ単一のオブジェクトを受け入れることであるが

# 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] 

出力は上記と同じです。

+1

すべての混乱のために包括的な議論と謝罪をいただき、ありがとうございました。私は本当にこれについていくつかの光を出すあなたに感謝します。 – klaypigeon