PDA

Показать полную графическую версию : [решено] создание массива в цикле


Neldoreth_inf
23-02-2017, 23:40
Добрый вечер! Собственно вопрос почему не работает конструкция ниже?
Ошибка Index was outside the bounds of the array.

$a = 10
$b = 20
$c = $b - $a
$list1[1] = $a
for ($i = 2; $i -le $c; $i++)
{
$list1[$i]=$a+1
$list1
}
Знаю что можно сделать проще через $list1 = 10..20, это просто пример.
Как можно создать массив, записывая каждый его элемент в цикле?

Iska
24-02-2017, 00:57
Собственно вопрос почему не работает конструкция ниже?
Ошибка Index was outside the bounds of the array. »
А у меня — другая:
Cannot index into a null array.
в:
$list1[1] = $a

Ошибка же:
Index was outside the bounds of the array. »
проявляется тогда, когда Вы пытаетесь обратиться к несуществующим по указанному индексу элементам. В Вашем случае — Вы явно обращаетесь к элементу за пределами массива.

Как можно создать массив, записывая каждый его элемент в цикле? »
Например, так (разумеется, не единственный способ):
$aArray = @()

for($i = 0; $i -lt 20; $i++) {
$aArray += $i * 2
}

$aArray.GetLowerBound(0), $aArray.GetUpperBound(0)
''
$aArray

Обратите внимание, что индекс первого элемента массива — 0 (причём — всегда 0), последнего элемента — 19 (но не 1 и 20 соответственно).

Или же, с явной декларацией массива и столь любезным Вам способом присваивания по индексу элемента:
$aArray = New-Object -Type System.Int32[] 20

for($i = $aArray.GetLowerBound(0); $i -le $aArray.GetUpperBound(0); $i++) {
$aArray[$i] = $i * 2
}

$aArray.GetLowerBound(0), $aArray.GetUpperBound(0)
''
$aArray

Есть и такие способы создания массива искомого размера:
$aArray = @(0) * 20
$aArray = ,0 * 20
и т.п.

Чтоб Вам стало понятнее (Вы явно переходите с какого-то другого языка), почитайте вот это: Learn Simple Ways to Handle Windows PowerShell Arrays – Hey, Scripting Guy! Blog (https://blogs.technet.microsoft.com/heyscriptingguy/2011/12/05/learn-simple-ways-to-handle-windows-powershell-arrays/).

Neldoreth_inf
24-02-2017, 07:42
Большое спасибо.




© OSzone.net 2001-2012