Foreach-объект, возвращающий «не может индексировать в нулевой массив», но отлично работает, когда я копирую каждую строку цикла - PullRequest
0 голосов
/ 01 июня 2019

У меня есть сценарий, который я концептуализирую, и он вроде как сконцентрирован вокруг этой идеи - выстроить выравнивающие массивы в хеш-таблицы, а затем вызывать их с индексом $ foreach-object $ для выполнения через команда или вывод, с наименьшим количеством записанного избыточного кода.

Я пробовал эту идею столько раз, но, похоже, она не работает. Не уверен, что я просто тупой или что-то еще здесь мне не хватает.

Я могу заставить другие хеш-таблицы и массивы работать с этим методом, но этот вызывает у меня проблемы.

Я сломаю это.

The first array will be the first line
The second array will be the 2nd line...
so on and so forth until the 6th.

каждая строка имеет несколько значений, но каждое из тех значений, которые соответствуют тому же элементу, что и над и под ним ... представьте себе таблицу Excel ... вроде как.

в конце этого массива / хеш-таблицы, я пытаюсь собрать каждый в ...

$control = ( 0..5 | % { first[$_] ; second[$_] ; third[$_] ; fourth[$_] ; fifth[$_] ; sixth[$_] } )

Я пробовал каждую перестановку, которую только мог придумать, со знаком at, без единицы, бросая контроль в curlies, используя скобки вместо curlies, используя запятые, это просто не похоже на работу. Я также попытался поместить пустой элемент управления = () перед выполнением самого цикла, кажется, ничего не работает ... Кажется, я не могу избежать этой ошибки "индекс за пределами массива"

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

Так что пока это работает, но это отстой ...

$Control = @{ 0 = ( $first[0] , $second[0] , $third[0] , $fourth[0] , $fifth[0] );
              1 = ( $first[1] , $second[1] , $third[1] , $fourth[1] , $fifth[1] );
              2 = ( $first[2] , $second[2] , $third[2] , $fourth[2] , $fifth[2] );
              3 = ( $first[3] , $second[3] , $third[3] , $fourth[3] , $fifth[3] );
              4 = ( $first[4] , $second[4] , $third[4] , $fourth[4] , $fifth[4] );
              5 = ( $first[5] , $second[5] , $third[5] , $fourth[5] , $fifth[5] );
              6 = ( $first[6] , $second[6] , $third[6] , $fourth[6] , $fifth[6] )}

Я хочу сделать это с наименьшим количеством кода, я просто не уверен, почему этот код не работает.

Кстати, если я вызову $ control [0] или что-то еще после вас, желаемый конечный результат - вывести эти переменные на экран ........

Индекс находился за пределами массива. х5 тысяч раз ...

1 Ответ

0 голосов
/ 01 июня 2019

Я понял это.

$control=@( 0..5 )

0..5 | % { $control[$_]=@($first[$_];$second[$_];$third[$_];$fourth[$_];$fifth[$_])}

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

...