создать новую переменную для каждого цикла в цикле foreach - PullRequest
2 голосов
/ 08 августа 2011

Как я могу поместить $ org в массив вместе с $ count?

Как этот пример массива:

$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"
   }

Ответы [ 2 ]

4 голосов
/ 08 августа 2011

Вы должны инициализировать вашу хеш-таблицу где-то перед циклом:

$myArray = @{} 

и добавьте

$myArray.Add($count, $org)

к вашей петле foreach.

РЕДАКТИРОВАТЬ: для обсуждения hastable / array см. Всю ветку;) Я просто сохранил имя переменной из исходного сообщения

4 голосов
/ 08 августа 2011

Похоже, вы путаете массивы и Hashtables.Массивы упорядочены и проиндексированы по числовому значению.Хеш-таблицы являются ассоциативными и индексируются любым значением, для которого определено равенство.

Это синтаксис массива

$arr = @(1,2,3)

и это синтаксис Hashtable

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

По вашему вопросуследующее будет работать

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

, при этом будет создан массив на основе 0, сопоставление int -> OrgName, поэтому

$orgs[$answer]

получит правильное имя.Или, если вы используете индексирование на основе 1

$orgs[$answer-1]

Обратите внимание, я удалил переключатель, так как для этого нет причин.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...