Powershell – Part 4 – Arrays and For Loops

X

Privacy & Cookies

This site uses cookies. By continuing, you agree to their use. Learn more, including how to control cookies.

Got It!

Advertisements

Arrays

For those that have never worked with arrays here’s a great way to understand them: If a variable is a piece of paper then the stack of papers is an array. It’s a list of variables or objects, and every programming/scripting language has ways to store these variables or objects linearly so you can access them later via a number of different methods.

So let’s look at how we can create an array of string objects in powershell:

$array = @("test1", "test2", "test3")$array

You can also add an element to the end of an array:

$array = @("test1", "test2", "test3")$array += "test4"$array

Můžete také přidávat pole dohromady:

$array = @("test1", "test2", "test3")$array2 = @("test4", "test5")$array = $array + $array2$array

Přístup k prvku pole můžete získat, pokud znáte číslo indexu požadovaného prvku. Pole jsou indexována celými čísly začínajícími číslem 0. To je vidět na následujícím kódu:

$array = @("test1", "test2", "test3")"First array value: " + $array"Second array value: " + $array"Third array value: " + $array

V tomto okamžiku můžete daný prvek používat, jako by to byla běžná proměnná. Protože naše pole je pole řetězců, můžeme při volání prvku tohoto pole používat řetězcové funkce, jako by to byla běžná proměnná nastavená na tuto řetězcovou hodnotu. např:

$array = @("test1", "test2", "test3")$array.ToUpper()

Pro smyčky

K polím lze přistupovat také lineárně pomocí smyček for. Smyčka for má ve své deklaraci obecně 3 informace:

  1. Inicializace
  2. Podmínka pro pokračování smyčky
  3. Opakující se výskyt – ten se obvykle používá k tomu, aby se smyčka přiblížila nesplnění podmínky pro vás smyčku, takže smyčka nakonec skončí.

Nejlépe je to vidět při pohledu na jednoduchou smyčku. Následující příklad se inicializuje nastavením hodnoty $i na 1. Poté se otestuje, zda je $i menší než 6, a při každém průchodu smyčkou se hodnota $i zvýší o jedničku:

for ($i=1;$i -lt 6; $i++) {"This is line number " + $i}

V uvedeném příkladu použijeme operátor porovnání -lt, abychom otestovali, zda je hodnota $i menší než 6. V případě, že je hodnota $i menší než 6, použijeme operátor porovnání -lt. K dispozici je mnoho dalších porovnávacích operátorů, například -gt (větší než), -le (menší nebo rovno), -ge (větší nebo rovno), -eq (rovno) a -ne (nerovná se). Chcete-li se seznámit s dostupnými operátory porovnávání, můžete použít následující příkaz:

help about_comparison_operators

Smyčky s poli

Je snadné vidět, jak lze aplikovat smyčku na pole a iterovat jednotlivé prvky pole v pořadí, pokud by existoval způsob, jak otestovat, kolik prvků je v poli. To můžeme provést pomocí člena objektu pole s názvem Length. Zde je třeba si uvědomit, že chcete inicializovat proměnnou index hodnotou 0, protože to je první prvek pole, ale chcete testovat, zda je váš index menší než délka pole, protože poslední prvek pole bude o jeden menší než počet prvků v poli. Zde je postup v praxi:

$array = @("test1", "test2", "test3")for ($i=0; $i -lt $array.length; $i++) {$array}

Ještě rychlejší způsob, jak provést cyklus for, je použití speciálního cyklu foreach. Smyčka foreach nastaví proměnnou na každou položku seznamu s mnohem jednodušší konstrukcí:

$array = @("test1", "test2", "test3")foreach ($element in $array) {$element}

Poslední věc, kterou je třeba u smyčky foreach zmínit, je, že k ní lze přistupovat prostřednictvím pipeline. Foreach, který se používá v pipeline, je vlastně alias k ForEach-Object. Použití pipeline tímto způsobem je rychlejší způsob zápisu foreach, ale při práci s velkými soubory dat může způsobit určitou režii. Když používáte foreach prostřednictvím pipeline, máte k dispozici speciální proměnnou, která reprezentuje prvek v bloku kódu, $_:

$array = ("test1", "test2", "test3")$array |foreach {$_}

Smyčku foreach jsme již viděli v akci v pipeline během 2. části tohoto seriálu, kdy jsme se zabývali čtením souborů. Zde je úryvek tohoto kódu, abyste viděli, jak může rutina předat seznam prostřednictvím smyčky foreach:

Get-Content dictionary.txt | foreach {$_.toupper()}

Seznamy a pole jsou pro programování a skriptování velmi důležité. Málokdy existuje skript, který by v té či oné podobě nepoužíval pole nebo seznam. Armed with this knowledge you can start looping away. We’ll be touching on regular expressions in the next tutorial. Until next time…

Advertisements

Napsat komentář