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
  • $null tai tyhjä
    • Kaikki -eq
  • Lisäämällä taulukot
    • Array lisäksi
    • Plus vastaa +=
    • Putki tehtävä
  • Array Tyyppejä
    • Vahvasti kirjoitettu taulukot
    • ArrayList
    • Geneeristen List
      • Lista
      • Poista()
    • Enemmän kokoelmat
  • Muut vivahteita
    • Pre-kokoinen taulukot
    • Kertomalla taulukot
    • Alustaa, jossa 0
    • Sisäkkäiset taulukot
    • Write-Tuotos -NoEnumerate
      • Return array
  • Mitä muuta?,
  • 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-Stringkanssa.,

     $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.

    Vastaa

    Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *