–
Taulukot ovat keskeinen kielen piirre useimmissa ohjelmointikieliä. Ne ovat kokoelma arvoja tai esineitä, ja siksi niitä on vaikea välttää. Katsotaan tarkkaan, mitä pöydillä on tarjottavanaan.
- page Index
- mikä on array?,ottelu
- Kaikki -eq
- Array lisäksi
- Plus vastaa +=
- Putki tehtävä
- Vahvasti kirjoitettu taulukot
- ArrayList
- Geneeristen List
- Lista
- Poista()
- Enemmän kokoelmat
- Pre-kokoinen taulukot
- Kertomalla taulukot
- Alustaa, jossa 0
- Sisäkkäiset taulukot
- Write-Tuotos -NoEnumerate
- Return array
Mikä on array?
en aio aloittaa perus-tekninen kuvaus siitä, mitä taulukot ovat ja miten niitä käytetään useimmat ohjelmointikielet, ennen kuin minä siirtää muita tapoja PowerShell käyttää niitä.
an array on tietorakenne, joka toimii useiden kohteiden kokoelmana. Voit iteroida array tai käyttää yksittäisiä kohteita indeksillä. Array luodaan jaksottaiseksi muistikappaleeksi, jossa jokainen arvo tallennetaan aivan toisen viereen.
kosketan jokaista niistä yksityiskohdista kun mennään.,
peruskäyttö
koska matriisit ovat tällainen PowerShellin perusominaisuus, niiden kanssa työskentelylle on yksinkertainen syntaksi Powershellissa.
Luoda array @()
tyhjä joukko voidaan luoda käyttämällä @()
PS> $data = @() PS> $data.count 0
Me voimme itse luoda array ja siementen kanssa arvot vain asettamalla ne @()
suluissa.
PS> $data = @('Zero','One','Two','Three') PS> $data.count 4 PS> $data Zero One Two Three
Tämä joukko on 4 kohteita. Kun kutsumme $data
muuttuja, näemme luettelon kohteistamme., Jos se on joukko merkkijonoja, niin meillä on yksi rivi per merkkijono.
Voimme julistaa array useita rivejä. Pilkku on tässä tapauksessa valinnainen ja yleensä jätetty pois.
$data = @( 'Zero' 'One' 'Two' 'Three' )
olen mieluummin julistaa minun taulukot useita rivejä, kuten että. Ei vain se on helpompi lukea, kun sinulla on useita kohteita, se tekee myös helpompi verrata aikaisempiin versioihin, kun käyttää lähde ohjaus.,
Muut syntaksi
on yleisesti tiedossa, että @()
syntaksi on luoda array, mutta pilkulla erotettu luettelot toimivat suurimman osan ajasta.
$data = 'Zero','One','Two','Three'
Kirjoita-Tuotos luoda taulukot
Yksi viileä temppu syytä mainita, on, että voit käyttää Write-Output
nopeasti luoda jouset konsoli.
$data = Write-Output Zero One Two Three
Tämä on kätevä, koska sinun ei tarvitse laittaa lainausmerkkeihin jouset, kun parametri hyväksyy merkkijonot., En koskaan tekisi tätä käsikirjoituksessa, mutta se on reilua peliä konsolissa.
Accessing kohteita
Nyt sinulla on array kohteita, sitä kannattaa käyttää ja päivittää niitä kohteita.
Korvata
käyttää yksittäisiä kohteita, voimme käyttää suluissa offset-arvo alkaa 0: sta. Tämä on, miten voimme saada ensimmäinen erä meidän joukko:
PS> $data = 'Zero','One','Two','Three' PS> $data Zero
syy miksi käytämme nolla tässä on, koska ensimmäinen erä on alussa lista, joten käytämme offset 0 kohteita saada se., Päästä toiseen kohteeseen, meidän pitäisi käyttää offset 1 ohittaa ensimmäinen kohde.
PS> $data One
Tämä tarkoittaisi sitä, että viimeinen erä on offset-3.
PS> $data Three
Indeksi
Nyt voit nähdä, miksi valitsin arvoja, jotka tein tätä esimerkkiä varten. Esittelin tämän offset, koska se on, mitä se todella on, mutta tämä poikkeama on yleisesti nimitystä hakemisto. Indeksi, joka alkaa 0
. Tämän kirjoituksen loppuosaa kutsun offsetiksi indeksin.,
Erityiset indeksi temppuja
useimmissa kielillä, voit määrittää vain yhden numeron indeksi ja saat yhden kohteen takaisin. PowerShell on paljon joustavampi. Voit käyttää useita indeksejä kerralla. Tarjoamalla luettelon indeksejä, voimme valita useita kohteita.
PS> $data Zero Two Three
kohteet palautetaan tilauksen perusteella indeksit tarjotaan. Jos kopioit indeksin, saat sen molemmilla kerroilla.,
PS> $data Three Zero Three
Voimme määritä numerosarja, jossa on sisäänrakennettu ..
operaattori.
PS> $data One Two Three
Tämä toimii käänteisesti myös.
PS> $data Three Two One
Voit käyttää negitive indeksin arvot tasoittamaan lopussa. Joten jos tarvitset listan viimeisen kohteen, voit käyttää -1
.,
PS> $data Three
kielletty
useimmissa kielissä, jos yrität käyttää indeksi kohde, joka on aiemmin taulukon loppuun, voisitte saada jonkinlainen virhe tai poikkeus. PowerShell ei anna sinulle mitään.
PS> $null -eq $data True
Ei indeksinä null array
Jos muuttuja on $null
ja yrität indeksi kuin array, saat System.Management.Automation.RuntimeException
poikkeus viesti Cannot index into a null array
.,
PS> $empty = $null SP> $empty Error: Cannot index into a null array.
Joten varmista, että paneelit eivät ole $null
ennen kuin yrität käyttää elementtejä sisällä.
Laskea
Taulukot ja muut kokoelmat on määrä omaisuutta, joka kertoo, kuinka monta kohdetta ovat joukko.
PS> $data.count 4
PowerShell 3.0 lisätty laskea omaisuuden eniten esineitä. sinulla voi olla yksi esine ja se pitäisi antaa sinulle määrä 1
.,
PS> $date = Get-Date PS> $date.count 1
Jopa $null
on määrä omaisuutta kuin se palaa 0
.
PS> $null.count 0
On olemassa joitakin ansoja täällä, että aion palata, kun olen kattaa tarkistamalla $null
tai tyhjät taulukot myöhemmin tässä artikkelissa.
pois yksi virhe
yhteinen ohjelmointivirhe syntyy, koska matriisit alkavat indeksistä 0. Off yhdellä virheellä voidaan ottaa käyttöön kahdella hyvin yleisellä tavalla.,
ensimmäinen on henkisesti ajattelu haluat 2. kohde ja käyttämällä-indeksi 2
ja todella saada kolmas erä. Tai ajattelemalla, että sinulla on 4
kohteita ja haluat viimeisen kohteen, joten käytät vain kokoa päästäksesi viimeiseen kohteeseen.
$data
PowerShell on täysin onnellinen anna sinun tehdä sitä ja antaa sinulle täsmälleen, mitä kohde on olemassa indeksi 4, $null
. Sinun pitäisi käyttää $data.count - 1
tai -1
että olemme oppineet edellä.,
PS> $data Three
Tämä on, jos voit käyttää -1
indeksi saada viimeinen osa.
PS> $data Three
Lee Dailey myös huomautti minulle, että voimme käyttää $data.GetUpperBound(0)
saada max indeksi numero.
PS> $data.GetUpperBound(0) Three
toiseksi yleisin tapa on, kun iteroimalla lista ja vain ei pysähdy oikeaan aikaan. Palaan asiaan, kun puhumme for
– silmukan käyttämisestä.,
päivittäminen kohteita
Voimme käyttää samaa indeksiä päivittää olemassa olevia kohteita array. Tämä antaa meille suoran pääsyn päivittää yksittäisiä kohteita.
$data = 'dos' $data = 'tres'
Jos yritämme päivittää kohteen joka on aiemmin viimeinen osa, sitten saamme Index was outside the bounds of the array.
virhe.
palaan asiaan myöhemmin, Kun puhun siitä, miten array saadaan suuremmaksi.
Toisto
jossain vaiheessa, sinun täytyy kävellä tai kerrata koko lista ja suorittaa joitakin toimia kunkin kohteen array.,
Pipeline
Matriisit ja PowerShell-putki on tarkoitettu toisilleen. Tämä on yksi yksinkertaisimmista tavoista käsitellä näitä arvoja. Kun siirrät array putkistoon, jokainen kohde array käsitellään erikseen.
PS> $data = 'Zero','One','Two','Three' PS> $data | ForEach-Object {"Item: "} Item: Item: Item: Item:
Jos et ole nähnyt $PSItem
ennen, vain tietää, että se on sama asia kuin $_
. Kumpaa tahansa voi käyttää, koska molemmat edustavat putkessa olevaa nykyistä esinettä.,
ForEach silmukka
ForEach
silmukka toimii hyvin kokoelmista. Käyttää syntax: foreach ( <variable> in <collection> )
foreach ( $node in $data ) { "Item: " }
ForEach menetelmällä
minulla on tapana unohtaa tämä yksi, mutta se toimii hyvin yksinkertainen toiminta. Powershellilla voi soittaa.ForEach()
kokoelmiin.
PS> $data.foreach({"Item "}) Item Item Item Item
.foreach()
vie parametri, joka on skripti estää. Voit pudottaa sulut ja vain antaa komentosarjan lohko.,
$data.foreach{"Item "}
Tämä on vähemmän tunnettu syntaksia, mutta se toimii aivan sama. Tämä foreach
menetelmä lisättiin Powershelliin 4.0.
silmukka
for
silmukka käytetään voimakkaasti useimmissa muissa kielissä, mutta et näe sitä paljon PowerShell. Kun näet sen, se on usein yhteydessä kävely array.
for ( $index = 0; $index -lt $data.count; $index++) { "Item: " -f $data }
ensimmäinen asia mitä teemme on alustaa an $index
ja 0
., Sitten me lisätä ehto, että $index
tulee olla pienempi kuin $data.count
. Lopuksi tarkennamme, että joka kerta kun silmukkaamme, että minun täytyy nostaa indeksiä 1
. Tässä tapauksessa $index++
lyhenne $index = $index + 1
.
Kun käytät for
silmukka, kiinnitä erityistä huomiota niiden kunto. Käytin $index -lt $data.count
tässä. On erittäin helppo saada ehto hieman väärin saada pois yhdellä virhe logiikkasi., Käyttäen $index -le $data.count
tai $index -lt ($data.count - 1)
eivät koskaan niin hieman väärin. Se aiheuttaisi tuloksen käsitellä liikaa tai liian vähän kohteita. Tämä on klassikko pois yhdellä virheellä.
Vaihtosilmukka
Tämä on sellainen, joka on erittäin helppo unohtaa. Jos annat array kytkin lausuma, se vastaa kunkin kohteen array.
$data = 'Zero','One','Two','Three' switch( $data ) { 'One' { 'Tock' } 'Three' { 'Tock' } Default { 'Tick' } }
Tämä tuottaa tämä lähtö:
Tick Tock Tick Tock
On olemassa paljon hienoja asioita, kuten tämä, että voimme tehdä, että kytkin selvitys., Minulla on toinen tähän liittyvä artikkeli.
- Kaikki mitä olet ikinä halunnut tietää kytkin selvitys
arvojen Päivittäminen
Kun joukko on kokoelma merkkijono tai kokonaislukuja (arvo tyypit), joskus haluat päivittää arvot array kuten silmukka niiden yli. Suurin osa yllä olevista silmukoista käyttää silmukassa muuttujaa, jolla on kopio arvosta. Jos päivität muuttujan, matriisin alkuperäistä arvoa ei päivitetä.
poikkeus, että lausunto on for
silmukka., Jos et halua kävellä array ja päivittää arvojen sisälle for
silmukka on mitä etsit.
for ( $index = 0; $index -lt $data.count; $index++ ) { $data = "Item: " -f $data }
Tässä esimerkkejä vie arvon indeksi, tekee muutamia muutoksia, ja sitten käyttää, että sama indeksi määrittää sen takaisin.
objektien ryhmät
toistaiseksi ainoa asia, jonka olemme sijoittaneet matriisiin, on arvotyyppi, mutta matriisit voivat sisältää myös objekteja.
$data = @( @{FirstName='Kevin';LastName='Marquette'} @{FirstName='John'; LastName='Doe'} )
Monet cmdlets palata kokoelmat esineitä, kuten taulukot, kun annat heille muuttuja.,
$processList = Get-Process
– Kaikki perus ominaisuudet olemme jo puhuneet, sovelletaan edelleen paneelit esineitä muutamia yksityiskohtia arvoinen muistuttaa.
Accessing ominaisuuksia
Voimme käyttää indeksi käyttää yksittäisen nimikkeen kokoelma aivan kuten arvon tyyppejä.
PS> $data FirstName LastName ----- ---- Kevin Marquette
Voimme käyttää ja päivittää ominaisuuksia suoraan.,
PS> $data.FirstName Kevin PS> $data.FirstName = 'Jay' PS> $data FirstName LastName ----- ---- Jay Marquette
Array ominaisuudet
Yleensä sinun olisi pitänyt luetella koko lista, kuten tämä, jos haluat käyttää kaikkia ominaisuuksia:
PS> $data | ForEach-Object {$_.LastName} Marquette Doe
Tai käyttämällä Select-Object -ExpandProperty
cmdlet-komentoa.
PS> $data | Select-Object -ExpandProperty LastName Marquette Doe
Mutta PowerShell tarjoaa meille mahdollisuuden pyytää LastName
suoraan. PowerShell luettelee ne kaikki meille ja antaa meille puhtaan listan.,
PS> $data.LastName Marquette Doe
luettelointi vielä tapahtuu, mutta emme näe monimutkaisuus sen takana.
Where-Object suodatus
Tämä on, jossa Where-Object
tulee niin voimme suodattaa ja valita, mitä haluamme array perustuu objektin ominaisuudet.
PS> $data | Where-Object {$_.FirstName -eq 'Kevin'} FirstName LastName ----- ---- Kevin Marquette
– Voimme kirjoittaa, että sama kysely kuin tämä saada FirstName
etsimme.,
$data | Where FirstName -eq Kevin
Missä()
Taulukot ovat Where()
tapa ne, jonka avulla voit määrittää scriptblock
suodatin.
$data.Where({$_.FirstName -eq 'Kevin'})
Tämä ominaisuus lisättiin PowerShell 4.0.
Päivittäminen esineitä silmukoita
arvon tyypit, ainoa tapa päivittää array on käyttää for-silmukan, koska meidän täytyy tietää, indeksi korvata arvo. Meillä on enemmän vaihtoehtoja objektien kanssa, koska ne ovat referenssityyppejä., Tässä on nopea esimerkki:
foreach($person in $data) { $person.FirstName = 'Kevin' }
Tämä silmukka on kävely jokainen esine $data
array. Koska esineet ovat viittaus tyypit, $person
muuttuja viittaa täsmälleen sama kohde, joka on array. Joten päivitykset sen ominaisuuksia päivittää alkuperäisen.
et vieläkään voi korvata koko objektia näin. Jos yrität määrittää uuden objektin $person
muuttuja, olet päivittämässä muuttujan viittaus jotain muuta, joka ei enää viittaa alkuperäiseen objektiin array., Tämä ei toimi kuten voisi odottaa:
foreach($person in $data) { $person = @{ FirstName='Kevin' LastName='Marquette' } }
Operaattorit
toimijoiden PowerShell myös taulukot. Osa niistä toimii hieman eri tavalla.
-liity
-join
operaattori on ilmeisin, joten me tarkastelemme ensin. Pidän -join
operaattorista ja käytän sitä usein. Se liittyy kaikki elementit array merkki tai merkkijono, jonka määrität.,
PS> $data = @(1,2,3,4) PS> $data -join '-' 1-2-3-4 PS> $data -join ',' 1,2,3,4
Yksi ominaisuuksia, että pidän siitä -join
operaattori on se, että se käsittelee yhden kohteita.
PS> 1 -join '-' 1
käytän tätä sisällä hakkuut ja sanalliset viestit.
PS> $data = @(1,2,3,4) PS> "Data is $($data -join ',')." Data is 1,2,3,4.
-liity $array
Tässä on näppärä temppu, että Lee Dailey huomautti minulle., Jos haluat liittyä kaikki ilman erotinmerkkiä, sen sijaan näin:
PS> $data = @(1,2,3,4) PS> $data -join $null 1234
Voit käyttää -join
kanssa array parametri, jossa ei ole etuliitettä. Katsokaa tätä esimerkkiä ja katsokaa, mistä puhun.
PS> $data = @(1,2,3,4) PS> -join $data 1234
-korvata ja -split
muita operaattoreita, kuten -replace
ja -split
tulee suorittaa kunkin kohteen array. En voi sanoa, että olisin koskaan käyttänyt niitä näin, mutta tässä on esimerkki.,
PS> $data = @('ATX-SQL-01','ATX-SQL-02','ATX-SQL-03') PS> $data -replace 'ATX','LAX' LAX-SQL-01 LAX-SQL-02 LAX-SQL-03
-sisältää
-contains
– operaattorin avulla voit tarkistaa joukko arvoja, nähdä, jos se sisältää määriteltyä arvoa.
PS> $data = @('red','green','blue') PS> $data -contains 'green' True
-in
Kun sinulla on yksittäinen arvo, joka haluat tarkistaa otteluissa yksi useita arvoja, voit käyttää -in
operaattori. Arvo olisi vasemmalla ja array oikealla puolella operaation.,
PS> $data = @('red','green','blue') PS> 'green' -in $data True
Tämä voi saada kallista, jos luettelo on suuri. Käytän usein regex-mallia, jos tarkistan yli 4-5 arvoa.
PS> $data = @('red','green','blue') PS> $pattern = "^({0})$" -f ($data -join '|') PS> $pattern ^(red|green|blue)$ PS> 'green' -match $pattern True
-eq ja -ne
Tasa-arvo ja taulukot voi saada monimutkainen. Kun array on vasemmalla puolella, jokainen kohde saa verrataan. Sen sijaan, että se palauttaisi True
, se palauttaa vastaavan esineen.,
PS> $data = @('red','green','blue') PS> $data -eq 'green' green
Kun käytät -ne
operaattori, meillä saa kaikki arvot, jotka eivät vastaa meidän arvo.
PS> $data = @('red','green','blue') PS> $data -ne 'green' red blue
Kun käytät tätä if()
lausunto, arvo, joka palautetaan on True
arvo. Jos arvoa ei palauteta, se on False
arvo. Molemmat seuraavat lausumat arvioidaan True
.,
$data = @('red','green','blue') if ( $data -eq 'green' ) { 'Green was found' } if ( $data -ne 'green' ) { 'And green was not found' }
otan uudelleen tämä hetki, kun puhumme testaus $null
.
-ottelu
-match
operaattori yrittää sovittaa kunkin kohteen kokoelma.
PS> $servers = @( 'LAX-SQL-01' 'LAX-API-01' 'ATX-SQL-01' 'ATX-API-01' ) PS> $servers -match 'SQL' LAX-SQL-01 ATX-SQL-01
Kun käytät -match
yhdellä arvo, erityinen muuttuja $Matches
saa asuttuja ottelu info. Näin ei ole, kun array käsitellään näin.
voimme omaksua saman lähestymistavan Select-String
kanssa.,
$servers | Select-String SQL
olen lähemmin Select-String
,-match
ja $matches
muuttuja toiseen virkaan kutsutaan monia tapoja käyttää regex.
$null tai tyhjä
Testaus $null
tai tyhjät taulukot voi olla hankalaa. Tässä ovat yhteiset ansat, joissa on taulukoita.
yhdellä silmäyksellä tämä lausunto näyttää siltä, että sen pitäisi toimia.
if ( $array -eq $null) { 'Array is $null' }
Mutta minä vain meni läpi, kuinka -eq
tarkistaa kunkin kohteen array., Joten meillä on joukko useita kohteita yhdellä $null-arvoa ja se olisi arvioitava $true
$array = @('one',$null,'three') if ( $array -eq $null) { 'I think Array is $null, but I would be wrong' }
Tämä on, miksi se on parasta sijoittaa $null
vasemmalla puolella operaattori. Tämä tekee tästä skenaariosta ei-aiheisen.
if ( $null -eq $array ) { 'Array actually is $null' }
$null
array ei ole sama asia kuin tyhjä joukko. Jos tiedät, että sinulla on array, tarkista määrä esineitä siinä., Jos matriisi on $null
kreivi tulee 0
.
if ( $array.count -gt 0 ) { 'Array is not empty' }
Siellä on yksi ansa varoa täällä. Voit käyttää count
vaikka sinulla on yksi esine, paitsi että kohde on PSCustomObject
. Tämä on vika, joka on vahvistettu Powershellissa 6.1. Se on hyvä uutinen, mutta monet ihmiset ovat edelleen 5.1 ja täytyy varoa sitä.
PS> $object = @{Name='TestObject'} PS> $object.count $null
Jos olet edelleen PowerShell 5.,1, voit kääriä objektin array ennen tarkistamista määrä saada tarkka määrä.
if ( @($array).count -gt 0 ) { 'Array is not empty' }
Jotta täysin pelata varman päälle, tarkista $null
tarkista sitten laskea.
if ( $null -ne $array -and @($array).count -gt 0 ) { 'Array is not empty' }
Kaikki -eq
olen viime aikoina nähnyt joku kysyy, miten voidaan varmistaa, että jokainen arvo array vastaa tiettyä arvoa. Reddit-käyttäjällä / u / bis: llä oli näppärä ratkaisu, joka tarkistaa mahdolliset virheelliset arvot ja kääntää sitten tuloksen.,
$results = Test-Something if ( -not ( $results -ne 'Passed') ) { 'All results a Passed' }
Lisäämällä taulukot
tässä vaiheessa olet alkanut ihmetellä, miten lisätä kohteita array. Nopea vastaus on, että et voi. Array on kiinteä koko muistin. Jos sinun täytyy kasvattaa sitä tai lisätä yksi kohde siihen, sinun täytyy luoda uusi array ja kopioida kaikki arvot yli vanha array. Tämä kuulostaa kalliilta ja paljon työtä, kuitenkin PowerShell piilottaa monimutkaisuus luoda uuden array.
Array addition
Voimme käyttää addition operator with arrays luoda uuden array., Näiden erotusten:
$first = @( 'Zero' 'One' ) $second = @( 'Two' 'Three' )
– Voimme lisätä ne yhdessä saat uuden taulukon.
PS> $first + $second Zero One Two Three
Plus vastaa +=
Me voimme itse luoda uuden taulukon käyttöön ja lisätä kohteen sen näin:
$data = @( 'Zero' 'One' 'Two' 'Three' ) $data += 'four'
muista, että joka kerta, kun käytät +=
että olet päällekkäisiä ja luoda uuden taulukon. Tämä ei ole pienten aineistojen ongelma, mutta se skaalautuu erittäin huonosti.,
Putkitehtävä
voit määrittää minkä tahansa putken tulokset muuttujaksi. Se on array, jos se sisältää useita kohteita.
$array = 1..5 | ForEach-Object { "ATX-SQL-$PSItem" }
Normaalisti kun ajattelemme käyttäen putki, ajattelemme tyypillinen PowerShell yksi-alukset. Voimme hyödyntää putkea foreach()
lausekkeilla ja muilla silmukoilla. Joten sen sijaan, että lisäämme kohteita array silmukka, voimme pudottaa kohteita putkistoon.,
$array = foreach ( $node in (1..5)) { "ATX-SQL-$node" }
Antamalla tulokset foreach
muuttuja, me kaapata kaikki esineet ja luoda yhtenäinen joukko.
Array Tyyppejä
oletuksena, array PowerShell on luotu ]
tyyppi. Näin se voi sisältää minkä tahansa objektin tai arvon. Tämä toimii, koska kaikki periytyy PSObject
– tyypistä.
vahvasti tyypitetyt matriisit
voit luoda minkä tahansa tyyppisen joukon käyttäen samankaltaista syntaksia., Kun luot vahvasti kirjoitettu array, se voi sisältää vain arvoja tai esineitä määritetyn tyyppinen.
ArrayList
Lisäämällä kohteita array on yksi sen suurimmista rajoituksia, mutta on olemassa muutamia muita kokoelmia, jotka voimme kääntää, että ratkaista tämä ongelma.
ArrayList
on yleisesti yksi ensimmäisiä asioita, joita ajattelemme, kun me tarvitsemme array, joka on nopeampi työskennellä. Se toimii kuin objekti array jokainen paikka, että tarvitsemme sitä, mutta se käsittelee lisäämällä kohteita nopeasti.
tässä on miten luodaan ArrayList
ja lisätään siihen kohteita.,
$myarray = ::new() $myArray.Add('Value')
pyydämme osaksi .Net saada tämän tyyppi. Tässä tapauksessa käytämme oletuksena constructor luoda sen. Sitten soitetaan – menetelmää, jolla siihen lisätään tuote.
syy, miksi käytän rivin alussa, on palauttaa koodi. Jotkut. Net-puhelut tekevät tämän ja voivat luoda odottamattomia ulostuloja.
Jos matriisissasi on vain merkkijonoja, Katso myös Stringbuilderin käyttöä., Se on lähes sama asia, mutta on joitakin menetelmiä, jotka ovat vain käsitellä Jouset. StringBuilder
on erityisesti suunniteltu suorituskykyä varten.
- Concatenate strings-käyttää StringBuilder
Se on todella yleistä, että ihmiset muuttavat ArrayList
ryhmät. Mutta se tulee ajalta, jolloin C#: llä ei ollut yleistä tukea., ArrayList
poistetaan tuki yleinen List
Geneeristen List
geneerinen tyyppi on erityinen tyyppi C#, jotka määrittävät yleisen luokan ja käyttäjä määrittelee tietotyypit, joita se aikoo käyttää, kun se on luotu. Joten jos haluat listan numeroita tai merkkijonoja, voit määrittää, että haluat luettelo int
tai string
tyypit.
näin luot listan jousille.
$mylist = ]::new()
Tai lista numeroita.,
$mylist = ]::new()
Emme voi heittää olemassa array lista, kuten tämä ilman luo ensimmäinen kohde:
$mylist = ]@(1,2,3)
Voimme lyhentää syntaksi hieman using namespace
selvitys PowerShell 5 ja uudempi. using
lausuman tulee olla käsikirjoituksen ensimmäinen rivi. Ilmoittamalla nimiavaruuden PowerShell antaa sinun jättää sen pois tietotyypeistä, kun viittaat niihin.,
using namespace System.Collections.Generic $myList = ]@(1,2,3)
Tämä tekee List
paljon enemmän käytettävissä.
sinulla on käytössäsi samanlainen Add
– menetelmä. Toisin kuin ArrayList, ei ole paluuta arvo Add
menetelmä, joten meidän ei tarvitse void
sitä.
$myList.Add(10)
Ja voimme edelleen käyttää elementtejä kuin muut ryhmät.,
PS> $myList 10
Lista
on lista tahansa, mutta kun et tiedä tyyppi esineitä, voit käyttää ]
sisältää niitä.
$list = ]::new()
Poista()
ArrayList
ja geneeristen List
sekä tukea poistamalla kohteita kokoelma.
using namespace System.Collections.Generic $myList = ]@('Zero','One','Two','Three') $myList.Remove("Two") Zero One Three
Kun työskentelee arvo tyypit, se poistaa ensin yksi luettelosta., Voit soittaa sitä yhä uudelleen ja uudelleen, jotta se arvo poistuisi. Jos sinulla on referenssityyppejä, sinun täytyy antaa objekti, jonka haluat poistaa.
]$drives = Get-PSDrive $drives.remove($drives)
$delete = $drives $drives.remove($delete)
poista-metodi palauttaa true, jos se voi löytää ja poistaa kohteen kokoelma.
lisää kokoelmia
on monia muita mallistoja, joita voidaan käyttää, mutta nämä ovat hyviä geneerisiä matriisikorvauksia., Jos olet kiinnostunut oppimaan lisää näistä vaihtoehdoista, katso tämä Ydin, että Mark Kraus koota.
Muita vivahteita,
Nyt, että olen käsitellyt kaikki tärkeimmät toiminnot, tässä on muutamia asioita, jotka halusin mainita, ennen kuin kääri tämä ylös.
esikokoiset matriisit
mainitsin, että matriisin kokoa ei voi muuttaa, kun se on luotu. Voimme luoda joukon ennalta määritettyä kokoa kutsumalla sitä new($size)
constructor.,
$data = ]::new(4) $data.count 4
Kertomalla taulukot
mielenkiintoinen pikku temppu on, että voit moninkertaistaa array kokonaisluku.
PS> $data = @('red','green','blue') PS> $data * 3 red green blue red green blue red green blue
Alustaa, jossa 0
yhteinen skenaario on, että haluat luoda taulukon, jossa kaikki nollia. Jos olet vain menossa on kokonaislukuja, voimakkaasti tyypitetty joukko kokonaislukuja oletuksena kaikki nollat.
PS> ]::new(4) 0 0 0 0
Voimme käyttää kertomalla temppu voit tehdä tämän myös.,
PS> $data = @(0) * 4 PS> $data 0 0 0 0
kiva juttu kertomalla temppu on, että voit käyttää mitä tahansa arvoa. Joten, jos haluat mieluummin olla 255
oletus arvo, tämä olisi hyvä tapa tehdä se.
PS> $data = @(255) * 4 PS> $data 255 255 255 255
Sisäkkäiset taulukot
array sisällä array kutsutaan sisäkkäisiä array. En käytä näitä paljon Powershellissa, mutta olen käyttänyt niitä enemmän muilla kielillä. Harkitse erilaisten ryhmien käyttämistä, kun tietosi sopivat ruudukkoon kuten kuvio.
tässä on kaksi tapaa, joilla voimme luoda 2-ulotteisen matriisin.,
$data = @(@(1,2,3),@(4,5,6),@(7,8,9)) $data2 = @( @(1,2,3), @(4,5,6), @(7,8,9) )
pilkku on erittäin tärkeää niille esimerkkejä. Annoin aiemmin esimerkin normaalista rivistöstä useilla radoilla, joissa pilkku oli valinnainen. Näin ei ole moniulotteisen matriisin laita.
tapa, jolla käytämme indeksin merkintää muuttuu hieman nyt, kun meillä on sisäkkäinen array. Käyttämällä $data
yllä, näin pääsisimme arvoon 3.
PS> $outside = 0 PS> $inside = 2 PS> $data 3
Lisää joukko kiinnike kunkin tason array pesiä., Ensimmäinen suluissa on ulompi useimmat array ja sitten työskentelet tiesi sieltä.
Kirjoita-Tuotos -NoEnumerate
PowerShell haluaa avata tai luetella taulukot. Tämä on ydinkysymys tavassa, jolla PowerShell käyttää putkea, mutta on aikoja, jolloin sitä ei halua tapahtua.
i yleensä piippaa esineitä Get-Member
oppiakseen niistä lisää. Kun piippaan siihen array, se puretaan ja Get-jäsen näkee jäsenet array eikä todellinen array.,
PS> $data = @('red','green','blue') PS> $data | Get-Member TypeName: System.String ...
estää sen avaamiseen array, voit käyttää Write-Object -NoEnumerate
.
PS> Write-Output -NoEnumerate $data | Get-Member TypeName: System.Object ...
toinen tapa tehdä tämä, että on enemmän hakata (ja yritän välttää hakata kuin tämä). Voit sijoittaa pilkun antennin eteen ennen kuin piippaat sen.
PS> ,$data | Get-Member TypeName: System.Object ...
Paluu array
Tämä yk-kääre, paneelit myös tapahtuu, kun lähtö tai paluu arvoja funktio., Voit silti saada array, jos annat lähtö muuttuja, joten tämä ei ole yleisesti ongelma.
saalis on, että sinulla on uusi array. Jos on koskaan ongelma, voit käyttää Write-Output -NoEnumerate $array
tai return ,$array
kiertää se.
Anything else?
tiedän, että tässä on paljon sulateltavaa. Toiveeni on, että opit jotain tästä artikkelista joka kerta kun luet sen ja että se tulee olemaan hyvä referenssi sinua pitkän aikaa., Jos havaitset tämän olevan hyödyllistä, kerro siitä toisille, joiden luulet saavan siitä arvoa.
täältä, suosittelen tsekkaa samanlainen viesti, että kirjoitin hashtables.