Kuidas kasutada indeksi massiive Bashis

Kuidas Kasutada Indeksi Massiive Bashis



Bash toetab indekseeritud massiive, mis on sisuliselt elementide loendid, millele pääseb juurde nende indeksinumbri abil. Indekseeritud massiivid on eriti kasulikud, kui soovite salvestada ja töödelda paljusid seotud väärtusi. Lugege seda artiklit, et saada teavet indeksimassiivide kasutamise kohta.

Mis on indeksimassiivid

Indekseeritud massiivid on bashi elementide kogum, millele pääseb juurde indeksi või võtme abil. Neid massiive saab kasutada andmete salvestamiseks ja hankimiseks kindlas järjekorras, mis muudab suurte andmemahtude haldamise lihtsamaks. Indekseeritud massiivi bashis deklareerimise süntaks on järgmine:

< massiivi_nimi > = ( element1 element2 element3 ... )

Siin on massiivi_nimi massiivi nimi ning element1, element2, element3 ja nii edasi on massiivi salvestatavad väärtused. Väärtused on eraldatud tühikutega ja pange tähele, et massiivi loomiseks saate kasutada ka deklareerimiskäsku.







Kuidas Bashis indekseeritud massiive kasutada

Indeksimassiivi loomiseks bashis peate lihtsalt deklareerima muutuja ja määrama sellele sulgudes olevad ja tühikutega eraldatud väärtused. Siin on mõned näited, mis näitavad, kuidas kasutada indekseeritud massiive bashis:



Loendi ümberjärjestamine Bashis

Kui teil on kaupade loend teatud järjekorras ja soovite neid teisel viisil ümber järjestada. Saate üksuste jaoks uue tellimuse loomiseks kasutada registrimassiivi järgmiselt.



#!/bin/bash
esemed = ( 'Mango' 'Ananass' 'Maasikas' 'Kirss' 'Viinamarjad' )
tellida = ( 4 2 0 3 1 )
jaoks i sisse ' ${tellimus[@]} '
teha
kaja ${items[$i]}
tehtud

Selles näites loome viie elemendiga massiivi nimega elemendid. Samuti loome indeksi massiivi nimega order, mis määrab üksustele uue järjekorra. Seejärel liigume tellimuste massiivi läbi ja kasutame iga väärtust indeksina, et hankida üksuste massiivist vastav üksus ja see välja printida.





Loendi filtreerimine Bashis

Kui teil on üksuste loend ja soovite teatud üksused tingimuse alusel välja filtreerida. Tingimusele vastavate üksuste indeksite jälgimiseks saate kasutada indeksi massiivi järgmiselt.



#!/bin/bash
esemed = ( 'Mango' 'Ananass' 'Maasikas' 'Kirss' 'Viinamarjad' )
indeksid = ( )

jaoks i sisse ' ${!items[@]} '
teha
kui [ [ ${items[$i]} == * 'r' * ] ]
siis
indeksid+= ( $i )
olla
tehtud

jaoks i sisse ' ${indexes[@]} '
teha
kaja ${items[$i]}
tehtud

Selles näites loome viie elemendiga massiivi nimega elemendid. Samuti loome tühja indeksimassiivi nimega indeksid. Seejärel vaatame läbi üksuste massiivi ja kontrollime, kas iga üksus sisaldab tähte “r”. Kui see nii on, lisame selle indeksi indeksite massiivi. Lõpuks liigume läbi indeksite massiivi ja kasutame iga väärtust indeksina, et hankida üksuste massiivist vastav üksus ja see välja printida.

Esinemiste loendamine Bashis

Kui teil on üksuste loend ja soovite loendada iga üksuse esinemiste arvu, saate loenduste jälgimiseks kasutada indeksimassiivi ja siin on näide demonstreerimiseks:

#!/bin/bash
esemed = ( 'Mango' 'Ananass' 'Maasikas' 'Kirss' 'Viinamarjad' )
loeb = ( )

jaoks i sisse ' ${!items[@]} '
teha
kui [ [ ! ' ${counts[@]} ' =~ ' ${items[$i]} ' ] ]
siis
loeb+= ( ' ${items[$i]} 1' )
muidu
indeks =$ ( kaja ' ${counts[@]} ' | tr '' '\n' | haare -n '^ ${items[$i]} ' | koos )
loendama =$ ( kaja ' ${counts[$index-1]} ' | lõigatud -d '' -f2 )
loeb [ $indeks - 1 ] = ' ${items[$i]} $((loendus+1) )'
olla
tehtud

jaoks loendama sisse ' ${counts[@]} '
teha
kaja $count
tehtud

Esmalt lähtestab see stringide loendiga massiivi, mida nimetatakse üksusteks. Seejärel deklareerib see tühja massiivi, mida nimetatakse loenditeks. For tsükkel luuakse iga massiivi üksuse itereerimiseks ja iga üksuse puhul kontrollitakse, kas see on massiivis 'counts' juba olemas.

Kui seda pole olemas, lisab see üksuse ja arvu 1 massiivi 'counts'. Kui see on olemas, suurendab see selle üksuse arvu massiivis 'counts'. Lõpuks kasutatakse iga üksuse ja sellele vastava arvu printimiseks teist for-tsüklit. Selle koodi väljund prindib välja iga üksuse loendi massiivi 'üksused' ja duplikaate loendatakse eraldi.

Loendi värskendamine Bashis

Kui teil on üksuste loend ja soovite sellest üksusi lisada või kustutada, saate selle jaoks kasutada indeksimassiivi ja siin on näide demonstreerimiseks:

#!/bin/bash
esemed = ( 'Mango' 'Ananass' 'Maasikas' 'Kirss' 'Viinamarjad' )

# Uue elemendi lisamine indekseeritud massiivile indeksi 2 juures
esemed [ 6 ] = 'oranž'
# Indeksis 2 oleva elemendi kustutamine indekseeritud massiivist
määramata esemed [ 2 ]

# Värskendatud massiivi printimine
kaja ' ${items[@]} '

Skriptis on indekseeritud massiivi 'üksused' määratletud viie algelemendiga. Uue elemendi lisamiseks määratakse väärtus lihtsalt soovitud indeksile, kasutades süntaksi massiivi[indeks]=väärtus. Selles skriptis lisatakse massiivi indeksisse 6 'oranž'. Elemendi kustutamiseks kasutame käsku unset, millele järgneb eemaldatava elemendi indeks. Sel juhul kustutatakse element indeksis 2 (“Maasikas”). Värskendatud massiiv prinditakse seejärel süntaksi „${array[@]}” abil, mis laiendab kogu massiivi.

Järeldus

Indekseeritud massiivid on mugav bashi struktuur, mis võimaldab salvestada ja töödelda mitut väärtust ühe muutuja abil. Indekseeritud massiivide süntaksi ja kasutamise mõistmisel saate kirjutada tõhusamaid ja tõhusamaid bash-skripte.