Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] создание массива в цикле (http://forum.oszone.net/showthread.php?t=324149)

Neldoreth_inf 23-02-2017 23:40 2714347

создание массива в цикле
 
Добрый вечер! Собственно вопрос почему не работает конструкция ниже?
Ошибка 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 2714360

Цитата:

Цитата Neldoreth_inf
Собственно вопрос почему не работает конструкция ниже?
Ошибка Index was outside the bounds of the array. »

А у меня — другая:
Цитата:

Cannot index into a null array.
в:
Код:

$list1[1] = $a
Ошибка же:
Цитата:

Цитата Neldoreth_inf
Index was outside the bounds of the array. »

проявляется тогда, когда Вы пытаетесь обратиться к несуществующим по указанному индексу элементам. В Вашем случае — Вы явно обращаетесь к элементу за пределами массива.

Цитата:

Цитата Neldoreth_inf
Как можно создать массив, записывая каждый его элемент в цикле? »

Например, так (разумеется, не единственный способ):
Код:

$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.

Neldoreth_inf 24-02-2017 07:42 2714371

Большое спасибо.


Время: 19:56.

Время: 19:56.
© OSzone.net 2001-