- 10/08/2020
- 24 minuuttia lukea
-
- j
- h
- s
- V
Taulukot ovat keskeinen kielen piirre useimmissa ohjelmointikieliä. Ne ovat kokoelma arvomerkkejä tai esineitä, joita on vaikea välttää. Katsotaan tarkkaan, mitä pöydät tarjoavat.,
Huom.
alkuperäinen versio tämän artikkelin ilmestyi blogi kirjoittanut @KevinMarquette. ThePowerShell-tiimi kiittää Keviniä tämän sisällön jakamisesta kanssamme. Tutustu hänen blogi atPowerShellExplained.com.
Mikä on array?
aion aloittaa perus-tekninen kuvaus siitä, mitä taulukot ovat ja miten niitä käytetään bymost ohjelmointikieliä, ennen kuin minä siirtää muita tapoja PowerShell käyttää niitä.
an array on tietorakenne, joka toimii useiden kohteiden kokoelmana., Voit iteroida yli thearray tai käyttää yksittäisiä kohteita indeksillä. Array on luotu juokseva murikka ofmemory, jossa jokainen arvo on tallennettu vieressä muut.
kosketan jokaista niistä yksityiskohdista kun mennään.
peruskäyttö
Koska ryhmät ovat niin perus ominaisuus PowerShell, on yksinkertainen syntaksi toimii heikkenee Powershellissä.,
Luoda array
tyhjä joukko voidaan luoda käyttämällä @()
PS> $data = @()PS> $data.count0
Me voimme itse luoda array ja siementen kanssa arvot vain asettamalla ne @()
suluissa.
PS> $data = @('Zero','One','Two','Three')PS> $data.count4PS> $dataZeroOneTwoThree
tällä listalla on 4 kohdetta. Kun kutsumme $data
muuttuja, näemme luettelon kohteistamme. Jos se on anarray Jouset, niin saamme yhden rivin per merkkijono.
Voimme julistaa array useita rivejä. Pilkku on tässä tapauksessa valinnainen ja yleensä leftout.,
$data = @( 'Zero' 'One' 'Two' 'Three')
olen mieluummin julistaa minun taulukot useita rivejä, kuten että. Ei vain se saa helpommin lukea, kun sinulla on useita kohteita, se myös helpottaa verrata aiempiin versioihin käytettäessä sourcecontrol.
Muut syntaksi
on yleisesti tiedossa, että @()
syntaksi on luoda array, mutta pilkulla erotettu listswork 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 stringsat konsoli.
$data = Write-Output Zero One Two Three
Tämä on kätevä, koska sinun ei tarvitse laittaa lainausmerkkeihin jouset, kun parametri acceptsstrings. 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, käytämme suluissa offset-arvo alkaa 0: sta. Tämä ishow saamme ensimmäinen erä meidän joukko:
PS> $data = 'Zero','One','Two','Three'PS> $dataZero
syy miksi käytämme nolla tässä on, koska ensimmäinen erä on alussa lista, joten olemme usean offset 0 kohteita saada se. Päästä toiseen erään, meidän pitäisi käyttää offset 1 toskip ensimmäinen erä.
PS> $dataOne
Tämä tarkoittaisi sitä, että viimeinen erä on offset-3.,
PS> $dataThree
Indeksi
Nyt voit nähdä, miksi valitsin arvoja, jotka tein tätä esimerkkiä varten. Esittelin tätä offsetbecause, että on, mitä se todella on, mutta tämä poikkeama on yleisesti nimitystä hakemisto. Anindex, joka alkaa 0
. Tämän kirjoituksen loppuosaa kutsun offsetiksi indeksin.
Erityinen 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., Antamalla luettelonindekseistä, voimme valita useita kohteita.
PS> $dataZeroTwoThree
kohteet palautetaan tilauksen perusteella indeksit tarjotaan. Jos kopioit indeksin, saat sen molemmilla kerroilla.
PS> $dataThreeZeroThree
Voimme määritä numerosarja, jossa on sisäänrakennettu ..
operaattori.
PS> $dataOneTwoThree
Tämä toimii käänteisesti myös.
PS> $dataThreeTwoOne
Voit käyttää negatiiviset indeksin arvot tasoittamaan lopussa. Joten jos tarvitset listan viimeisen kohteen, voit käyttää -1
.,
PS> $dataThree
kielletty
useimmissa kielissä, jos yrität käyttää indeksi kohde, joka on aiemmin taulukon loppuun, youwould saada jonkinlainen virhe tai poikkeus. PowerShell hiljaa palauttaa mitään.
PS> $null -eq $dataTrue
Ei indeksinä null array
Jos muuttuja on $null
ja yrität indeksi kuin array, saatSystem.Management.Automation.RuntimeException
poikkeus viestiCannot index into a null array
.,
PS> $empty = $nullSP> $emptyError: 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.count4
PowerShell 3.0 lisäsi kreivin ominaisuuden useimpiin esineisiin. sinulla voi olla yksi esine ja se shouldgive et lasken 1
.
PS> $date = Get-DatePS> $date.count1
Jopa $null
on määrä omaisuutta kuin se palaa 0
.,
PS> $null.count0
On olemassa joitakin ansoja täällä, että aion palata, kun olen kattaa tarkistamalla $null
tai tyhjä arrayslater tässä artikkelissa.
Off-by-one-virheet
yleinen ohjelmointivirhe syntyy, koska matriisit alkavat indeksistä 0. Off-by-one virheet voidaan ottaa käyttöön kahdella tavalla.
ensimmäinen on henkisesti ajattelu haluat toisen kohteen ja käyttää indeksi 2
ja todella gettingthe kolmas erä. Tai ajattelemalla, että sinulla on neljä kohdetta ja haluat viimeisen kohteen, joten käytät counto käyttää viimeistä kohdetta.,
$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> $dataThree
Tämä on, jos voit käyttää -1
indeksi saada viimeinen osa.
PS> $dataThree
Lee Dailey myös huomautti minulle, että voimme käyttää $data.GetUpperBound(0)
saada max indexnumber.,
PS> $data.GetUpperBound(0)3PS> $dataThree
toiseksi yleisin tapa on, kun iteroimalla luettelosta ja pysäyttää oikeaan aikaan. Puhun tästä, 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 suora pääsy tupdate yksittäisiä kohteita.
$data = 'dos'$data = 'tres'
Jos yritämme päivittää kohteen joka on aiemmin viimeinen osa, sitten saammeIndex was outside the bounds of the array.
virhe.
palaan asiaan myöhemmin, Kun puhun siitä, miten array saadaan suuremmaksi.,
Toisto
jossain vaiheessa, ehkä kävellä tai kerrata koko lista ja suorittaa joitakin toimia eachitem array.
Pipeline
Matriisit ja PowerShell-putki on tarkoitettu toisilleen. Tämä on yksi yksinkertaisimmista tavoista käsitellä näitä arvoja. Kun siirrät array putkeen, jokainen kohde sisällä array isprocessed yksilöllisesti.
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 $_
., Voit käyttää eitheronea, koska molemmat edustavat putkistossa 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 voit tocall .ForEach()
kokoelmalla.
PS> $data.foreach({"Item "})Item Item Item Item
.foreach()
vie parametri, joka on skripti estää., Voit pudottaa sulkeet ja justprovide script lohko.
$data.foreach{"Item "}
Tämä on vähemmän tunnettu syntaksia, mutta se toimii aivan sama. Tämä foreach
menetelmä lisättiin inPowerShell 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
niitä on vähemmän kuin $data.count
. Lopuksi tarkennamme, että joka kerta kun silmukkaamme, että minun täytyy lisätä theindexiä 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 helppo saada tila hieman väärin saada off-by-one-virhe logiikassasi., Käyttäen $index -le $data.count
tai $index -lt ($data.count - 1)
eivät koskaan soslightly väärin. Se aiheuttaisi tuloksen käsitellä liikaa tai liian vähän kohteita. Tämä on taclassic off-by-one virhe.
Vaihtosilmukka
Tämä on sellainen, joka on helppo unohtaa. Jos annat array kytkin lausuma, sechecks kunkin kohteen array.
$data = 'Zero','One','Two','Three'switch( $data ){ 'One' { 'Tock' } 'Three' { 'Tock' } Default { 'Tick' }}
TickTockTickTock
On olemassa paljon hienoja asioita, joita voimme tehdä, että kytkin selvitys. Minulla on toinen artikoitu tähän.,
- Kaikki mitä olet ikinä halunnut tietää kytkin selvitys
arvojen Päivittäminen
Kun joukko on kokoelma merkkijono tai kokonaislukuja (arvo tyypit), voidaan joskus toupdate arvot array kuten silmukka niiden yli. Suurin osa yllä olevista silmukoista käyttää muuttujaa theloopissa, jolla on kopio arvosta. Jos päivität muuttujan, matriisin alkuperäistä arvoa ei päivitetä.
poikkeus, että lausunto on for
silmukka., Jos haluat kävellä array ja päivittää valuesinside se, sitten for
silmukka on mitä etsit.
for ( $index = 0; $index -lt $data.count; $index++ ){ $data = "Item: " -f $data}
Tämä esimerkki ottaa arvon indekseittäin, tekee muutamia muutoksia ja käyttää sitten samaa indeksiä siirtääkseen 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ä fewdetails syytä huomauttaa.
Accessing ominaisuudet
Voimme käyttää indeksi käyttää yksittäisen nimikkeen kokoelma aivan kuten arvon tyyppejä.
PS> $dataFirstName LastName----- ----Kevin Marquette
Voimme käyttää ja päivittää ominaisuuksia suoraan.,
PS> $data.FirstNameKevinPS> $data.FirstName = 'Jay'PS> $dataFirstName 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}MarquetteDoe
Tai käyttämällä Select-Object -ExpandProperty
cmdlet-komentoa.
PS> $data | Select-Object -ExpandProperty LastNameMarquetteDoe
Mutta PowerShell tarjoaa meille mahdollisuuden pyytää LastName
suoraan. PowerShell luettelee ne meille ja palauttaa puhtaan listan.
PS> $data.LastNameMarquetteDoe
luettelointi tapahtuu edelleen, mutta emme näe sen takana olevaa monimutkaisuutta.,
Where-Object suodatus
Tämä on, jossa Where-Object
tulee niin voimme suodattaa ja valita, mitä haluamme ulos arraybased ominaisuuksia esine.
PS> $data | Where-Object {$_.FirstName -eq 'Kevin'}FirstName LastName----- ----Kevin Marquette
– Voimme kirjoittaa, että saman kyselyn 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ää, theindex korvata arvo. Meillä on enemmän vaihtoehtoja objektien kanssa, koska ne ovat referenssityyppejä. Tässä 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 itsproperties eivät päivitä alkuperäinen.,
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.
liittyä
-join
operaattori on kaikkein ilmeinen, joten katsotaanpa se ensimmäinen., 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-4PS> $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ä everythingwithout erotin, sen sijaan näin:
PS> $data = @(1,2,3,4)PS> $data -join $null1234
Voit käyttää -join
kanssa array parametri, jossa ei ole etuliitettä. Katso tätä esimerkkiä tosee, että puhun.
PS> $data = @(1,2,3,4)PS> -join $data1234
-korvata ja -split
muita operaattoreita, kuten -replace
ja -split
suorittaa kunkin kohteen array. En voi sanoa, että olen 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-01LAX-SQL-02LAX-SQL-03
sisältää
-contains
– operaattorin avulla voit tarkistaa joukko arvoja, nähdä, jos se sisältää specifiedvalue.
PS> $data = @('red','green','blue')PS> $data -contains 'green'True
sisään
Kun sinulla on yksittäinen arvo, joka haluat tarkistaa otteluissa yksi useita arvoja, te canuse -in
operaattori. Arvo olisi vasemmalla ja taulukon oikealla puolella: lle.
PS> $data = @('red','green','blue')PS> 'green' -in $dataTrue
tämä voi tulla kalliiksi, jos lista on suuri. Käytän usein regex-mallia, jos tarkistan enemmän thana-arvoja.,
PS> $data = @('red','green','blue')PS> $pattern = "^({0})$" -f ($data -join '|')PS> $pattern^(red|green|blue)$PS> 'green' -match $patternTrue
-eq ja -ne
Tasa-arvo ja taulukot voi saada monimutkainen. Kun array on vasemmalla puolella, jokainen kohde saavahvistettu. Sen sijaan palaa True
, se palauttaa objektin, joka vastaa.
PS> $data = @('red','green','blue')PS> $data -eq 'green'green
Kun käytät -ne
operaattori, saamme kaikki arvot, jotka eivät vastaa meidän arvo.
PS> $data = @('red','green','blue')PS> $data -ne 'green'redblue
Kun käytät tätä if()
lausunto, arvo, joka palautetaan on True
arvo., Jos arvoa ei palauteta, se on False
arvo. Molemmat seuraavista lausunnoista arvioivat 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ää yhdistää jokaisen kohteen kokoelma.
PS> $servers = @( 'LAX-SQL-01' 'LAX-API-01' 'ATX-SQL-01' 'ATX-API-01')PS> $servers -match 'SQL'LAX-SQL-01ATX-SQL-01
Kun käytät -match
yhdellä arvo, erityinen muuttuja $Matches
saa asuttuja matchinfo., 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 calledThe 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. Niin meillä voi olla erilaisia severalitems 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 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 0
.
if ( $array.count -gt 0 ){ "Array isn't empty"}
Siellä on yksi ansa varoa täällä. Voit käyttää count
vaikka sinulla on singleobject, 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 tarkkailun laskea estämään tarkkaa lukua.,
if ( @($array).count -gt 0 ){ "Array isn't empty"}
Jotta täysin pelata varman päälle, tarkista $null
tarkista sitten laskea.
if ( $null -ne $array -and @($array).count -gt 0 ){ "Array isn't 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 tämä näppärä ratkaisu, joka tarkistaa virheelliset arvot ja näpäyttää tuloksen.
$results = Test-Somethingif ( -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ä yhden kohteen siihen, sinun täytyy luoda uusi array ja kopioida kaikki arvot yli vanha array. Tämä kuulostaa paljon työtä, kuitenkin, PowerShell piilottaa monimutkaisuus luoda uusi taulukko. PowerShellimplements the addition operator (+
) for arrays.
Huomautus
PowerShell ei toteuta vähennysoperaatiota. Jos haluat joustavan vaihtoehdon anarraylle, sinun on käytettävä geneeristä List
– objektia.,
Array lisäksi
Voimme käyttää lisäksi operaattori paneelit luoda uuden taulukon. Näiden erotusten:
$first = @( 'Zero' 'One')$second = @( 'Two' 'Three')
– Voimme lisätä ne yhdessä saat uuden taulukon.
PS> $first + $secondZeroOneTwoThree
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 ongelma pienille tiedoille, mutta se skaalautuu erittäin huonosti.,
Putkitehtävä
voit määrittää minkä tahansa putken tulokset muuttujaksi. Se on array, jos se sisältää multipleitems.
$array = 1..5 | ForEach-Object { "ATX-SQL-$PSItem"}
Normaalisti kun ajattelemme käyttäen putki, ajattelemme tyypillinen PowerShell yksi-alukset. Voimme keskittää putken foreach()
lausekkeilla ja muilla silmukoilla. Joten sen sijaan, että lisäämme kohteita anarray silmukka, voimme pudottaa kohteita putkistoon.
$array = foreach ( $node in (1..5)){ "ATX-SQL-$node"}
Array Tyyppejä
oletuksena, array PowerShell on luotu ]
tyyppi., Tämä mahdollistaa sen sisältääon objektin tai arvon tyyppi. 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 collectionsthat voimme kääntää, että ratkaista tämä ongelma.,
ArrayList
on yleisesti yksi ensimmäisiä asioita, joita ajattelemme, kun me tarvitsemme array, joka isfaster työskennellä. Se toimii kuin objekti array jokainen paikka, että tarvitsemme sitä, mutta se käsittelee addingitems nopeasti.
Here is how we create an ArrayList
and add its.
$myarray = ::new()$myArray.Add('Value')
we are calling into.net to get this type. Tässä tapauksessa, käytämme oletuksena rakentaja luoda se. Sitten soitamme Add
– menetelmään, jolla siihen lisätään tuote.,
syy, miksi käytän rivin alussa, on palauttaa koodi. Some.NET puhelut tekevät tämän ja voivat luoda odottamattoman tuotoksen.
Jos vain tiedot, että sinulla on teidän joukko on jouset, sitten myös katsomaan usingStringBuilder. Se on lähes sama asia, mutta on joitakin menetelmiä, jotka ovat vain käsitellä strings. StringBuilder
on erityisesti suunniteltu suorituskykyä varten.
on yleistä, että ihmiset siirtyvät ArrayList
– ryhmään matriiseista. Mutta se tulee ajalta, jolloin C# did ’ thave yleinen tuki., ArrayList
on vanhentunut tukea geneeristen List
Geneeristen List
geneerinen tyyppi on erityinen tyyppi C#, joka määrittelee yleisen luokan ja käyttäjä määrittää tiedot tyypit, joita se käyttää, kun se on luotu. Joten jos haluat listan numeroita tai merkkijonoja, sinun olisi definethat haluat luettelo int
tai string
tyypit.
näin luot listan jousille.
$mylist = ]::new()
tai luettelo numeroista.,
$mylist = ]::new()
Emme voi heittää olemassa array lista, kuten tämä ilman, että luodaan objekti, ensimmäinen:
$mylist = ]@(1,2,3)
Voimme lyhentää syntaksi using namespace
selvitys PowerShell 5 ja uudempi. using
lausuman pitää olla käsikirjoituksen ensimmäinen rivi. Ilmoittamalla nimiavaruuden, PowerShelllets jätät 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 onthe Add
menetelmä, joten meidän ei tarvitse void
sitä.
$myList.Add(10)
Ja voimme edelleen käyttää elementtejä kuin muut ryhmät.
PS> $myList10
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")ZeroOneThree
arvotyyppien kanssa työskennellessään se poistaa listalta ensimmäisen. Voit kutsua sitä andover uudelleen poistaa että arvo. Jos sinulla on referenssityyppejä, sinun täytyy antaa objecthat 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, tutustu thisGist Thatmark Kraus yhteensä.
Muita vivahteita,
Nyt, että olen käsitellyt kaikki tärkeimmät toiminnot, tässä on muutamia asioita, jotka halusin tomention ennen kuin kääri tämä ylös.,
esikokoiset matriisit
mainitsin, että matriisin kokoa ei voi muuttaa, kun se on luotu. Voimme luoda joukon OFA ennalta määritetty koko kutsumalla sitä new($size)
constructor.
$data = ]::new(4)$data.count4
Kertomalla taulukot
mielenkiintoinen pikku temppu on, että voit moninkertaistaa array kokonaisluku.
PS> $data = @('red','green','blue')PS> $data * 3redgreenblueredgreenblueredgreenblue
Alustaa, jossa 0
yhteinen skenaario on, että haluat luoda taulukon, jossa kaikki nollia. Jos olet vain menossa onintegrers, vahvasti kirjoitettu joukko kokonaislukuja oletuksena kaikki nollat.,
PS> ]::new(4)0000
Voimme käyttää kerrointemppua myös tähän.
PS> $data = @(0) * 4PS> $data0000
kiva juttu kertomalla temppu on, että voit käyttää mitä tahansa arvoa. Joten jos sinulla olisi ratherhave 255
oletus arvo, tämä olisi hyvä tapa tehdä se.
PS> $data = @(255) * 4PS> $data255255255255
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 gridmäiseen kuvioon.,
tässä on kaksi tapaa, joilla voimme luoda kaksiulotteisen matriisin.
$data = @(@(1,2,3),@(4,5,6),@(7,8,9))$data2 = @( @(1,2,3), @(4,5,6), @(7,8,9))
pilkku on näissä esimerkeissä erittäin tärkeä. Annoin aikaisemman esimerkin normaalista rivistä, jossa 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 = 0PS> $inside = 2PS> $data3
Lisää joukko kiinnike kunkin tason array pesiä., Ensimmäinen suluissa on uloin array ja sitten työskentelet tiesi sieltä.
Kirjoita-Tuotos -NoEnumerate
PowerShell haluaa avata tai luetella taulukot. Tämä on keskeinen näkökohta tavalla PowerShell käyttää kanssa, mutta on hetkiä, että et halua, että näin tapahtuu.
i yleensä piippaa esineitä Get-Member
oppiakseen niistä lisää. Kun piippaan array siihen, itgets unwrapped ja Get-jäsen näkee jäsenet array eikä todellinen array.,
PS> $data = @('red','green','blue')PS> $data | Get-MemberTypeName: System.String...
estää sen avaamiseen array, voit käyttää Write-Object -NoEnumerate
.
PS> Write-Output -NoEnumerate $data | Get-MemberTypeName: System.Object...
minulla on toinen tapa, että on enemmän hakata (ja yritän välttää hakata kuin tämä). Voit sijoittaa acomman array: n eteen ennen kuin piippaat sen.
PS> ,$data | Get-MemberTypeName: System.Object...
Paluu array
Tämä purkaminen taulukot 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.
Vastaa