PowerShell для програміста
Про що і навіщо цей сайт я поки що не вирішив. Вважатимемо це тестуванням Wordpress
PowerShell для програміста Масив масивів у PowerShell
Вже кілька разів зіткнувся з особливостями створення різних ієрархій у вигляді масивів та хешів. І якщо з асоціативними масивами (хешами) проблем зазвичай немає, то ось зі звичайними вже як карта ляже. Проблема в тому, що PowerShell намагається додумувати та незримо конвертувати типи. Вирішив увічнити загалом.
Як думаєте, що буде результатом виразу: $a = @(1,2,3,@(4,5,6))
Правильно! Одновимірний масив @ (1,2,3,4,5,6)
А ось що б не відбулося об'єднання масивів, а все ж таки 4-й елемент став саме вкладеним масивом треба додати магічну кому: $a = @(1,2,3,, @(4, 5,6))
Власне, скрізь де ми хочемо щоб масив залишився масивом, найпростіший варіант це додати кому попереду. Можна, звичайно, працювати з яким-небудь C# масивом/колекцією (відповідним чином оголосивши) і там проблем не буде.
Нижче повний код скрипту, де реалізовані приклади вкладених масивів і хешів на прикладі найпростішої рекурсивної функції. Для наочності результату зробив перетворення на JSON. Конструкції-replace “\s”,”” – реалізують мініфікацію, можна прибрати – буде розгорнутий JSON
Багато магії ось у цьому рядку: $la += ,@((RecursionArray -deep ($deep-1)), “Iteration $deep”)
А перед нею кома, щоб останній (глибокий) елемент саме вклався в передостанній, а не додався до передостаннього масиву: $la += @((RecursionArray -deep ($deep-1)),$deep) [[[[1,2],3],4],5] (собаку можна було і не ставити, тут навіть PoSh-у відомо що це масив)
Ну а з собакою та комою, навіть одноелементне вкладеннямасивів побудується правильно: $la += ,@(RecursionArray -deep ($deep-1)) [[[[[]]]]]
Загалом, особисто моя практика говорить про те, що з масивами PowerShell потрібно працювати максимально обережно. Набагато простіше використовувати хеші.