2011-08-08 163 views
2

如何將$ org與$ count一起放入數組中?在foreach循環中爲每個循環創建一個新變量

像本實施例中陣列:

$myArray = @{ 
    1="SampleOrg"; 
    2="AnotherSampleOrg" 
} 

又如:

$myArray = @{ 
    $count="$org"; 
    $count="$org" 
} 

實施例的foreach:

$count=0;get-organization | foreach {$count++; $org = $_.Name.ToString();write-host $count -nonewline;write-host " $org"} 
$answer = read-host "Select 1-$count" 

上面會顯示:

1 SampleOrg 
2 AnotherSampleOrg 

Select 1-2: 

之後我想要做的是將數組用於交換機中。

例子:

switch ($answer) 
    { 
    1 {$org=myArray[1]} #<-- or whatever that corresponds to "SampleOrg" 
    2 {$org=myArray[2]} #<-- or whatever that corresponds to "AnotherSampleOrg" 
    } 
+0

我不知道如果我理解正確的話,該變量的名稱,但IMO你只需要爲你的'foreach'循環添加一個'$ myArray.Add($ count,$ org)'。編輯:你必須在循環之前的某個地方初始化你的數組:'$ myArray = @ {}' –

+0

你的解決方案工作出色! '$ myArray = @ {}; $ count = 0; get-organization | foreach {$ count ++; $ org = $ _。Name.ToString(); write-host $ count -nonewline; write-host「$ org」; $ myArray.Add($ count,$ org)}' – NiklasJ

回答

4

你必須在循環之前的某個地方初始化哈希表:

$myArray = @{} 

,並添加

$myArray.Add($count, $org) 

您的foreach循環。

編輯:有關hastable /陣列的討論看到整個線程;)我只是不停地從原來的張貼

+0

最終結果: '$ myArray = @ {}; $ count = 0; get-organization | foreach {$ count ++; $ org = $ _。Name.ToString(); write-host $ count -nonewline; write-host「$ org」; $ myArray.Add($ count,$ org)}' – NiklasJ

+1

'$ myArray = @ {}'不是數組 –

+0

散列表是一種數組。 (關聯數組) – NiklasJ

4

你看上去混亂數組和哈希表。數組被排序,並通過數值進行索引。哈希表是關聯的,並且由任何具有相等定義的值進行索引。

這是數組語法

$arr = @(1,2,3) 

,這是Hashtable的語法

$ht = @{red=1;blue=2;} 

對於你的問題,下面的工作

$orgs = @(get-organization | % { $_.Name }) 

這將創建一個0基於陣列,映射int - > OrgName,所以

$orgs[$answer] 

將得到正確的名稱。或者,如果你正在使用基於1的索引

$orgs[$answer-1] 

注意,我刪除了開關,因爲沒有理由。

+0

不會創建數組一個嵌套的哈希表,而不是相反? – JNK

+0

@JNK - 確實如此。由於該索引似乎是一個整數,因此數組是最棘手的數據結構 –

+0

。 $ answer索引讓我失望 - $答案是一個int不是一個關鍵!看起來他也想使用基於1的索引,所以他應該留意0。 – JNK

相關問題