kuinka laskea bashissa määritetyn matriisin pituus?

En ole uusi bash ja en löydä hyvää opetusohjelmaa vastaamaan kysymykseeni.

array=( item1 item2 item3 ) for name in ${array[@]}; do echo current/total ... some other codes done 

Haluan laskea current – ja total -arvot tämän odotetuksi tulokseksi:

1/3 2/3 3/3 

Kiitos kaikenlaisista vinkeistä.

Kommentit

  • Huomaa, että sinun tulisi laittaa ${array[@]} lainausmerkeissä. Muussa tapauksessa sanojen jakaminen suoritetaan ja saat ei-toivottuja tuloksia syötteistä, kuten array=("item 1" "item 2" "item 3").

Vastaa

Voit käyttää taulukkoindeksejä käyttämällä ${!array[@]} ja taulukon pituutta käyttämällä ${#array[@]} , esimerkiksi :

#!/bin/bash array=( item1 item2 item3 ) for index in ${!array[@]}; do echo $index/${#array[@]} done 

Huomaa, että koska bash-taulukot ovat nolla indeksoitu , saat oikeastaan:

0/3 1/3 2/3 

Jos haluat, että laskenta alkaa 1: stä, voit korvata $index: llä $((index+1)). Jos haluat sekä arvot että indeksit, voit käyttää "${array[index]}" eli

#!/bin/bash array=( item1 item2 item3 ) for index in ${!array[@]}; do echo $((index+1))/${#array[@]} = "${array[index]}" done 

antaa

1/3 = item1 2/3 = item2 3/3 = item3 

kommentit

  • Jos haluan saada 1,2,3, voin Teen tämän: echo ($index+1)/${#array[@]}?
  • btw, näyttää siltä, että tällä tavalla voin ' saada item1, item2, item3 silmukassa. Minulla on vielä muita koodeja käsitellä item1, item2, item3 tavaraa. Kiitos,
  • Katso muokattu viesti.

Vastaa

Nollahakemisto on täysin kelvollinen jos luulet indeksin olevan offset taulukon perusosoitteesta. Se on itse asiassa normi, vaikka se vaihtelee murteesta toiseen. Vanhan joviaalisen kielen mukaan [0] sisälsi itse asiassa taulukon enimmäiskoon. Joten se alkoi [1].

Joillakin Basic-toteutuksilla voit mielivaltaisesti valita joko 0 tai 1 ensimmäiseksi hakemistoksi. Ja ainakin yhden Basicin avulla voit määrittää taulukot indeksoimaan fron [n] kohtaan [m]. missä n ja m voi olla mikä tahansa kokonaislukuarvo, jopa negatiivinen, kunhan n on pienempi suurempi tai yhtä suuri kuin m. Arvo n ne vähennetään syötetystä [index] -arvosta, nimellä index-n = 0, jos hakemisto vastaa n.

Mutta voit tehdä saman ja enemmän omassa koodissasi Voit jopa kääntää järjestyksen taulukosta tällä tavalla:

dim array(0, abs(m-n)); step=sign(m-n); if n > m then base=m else base=n; fi 

Tämä koodiesimerkki on itse asiassa vain osittain yhtä kieltä. Halusin vain sen olevan luettavampi. Vaihemuuttujaa käytetään ohjaamaan näennäissuuntaa, johon olet liikkeellä joko positiivisena tai negatiivisena, ja sitä käytetään laskemaan tehokas indeksi matriisiin tultaessa tai siitä tultaessa, mikä on oikeastaan aina positiivinen kohdasta [0].

Vastaa

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