Kaip naudoti „Split“ metodą „Ruby“

Kaip jūs jau žinote, stygos Rubinas yra tai, kas vadinami pirmos klasės daiktai kurie naudoja daugybę užklausų ir manipuliacijų metodų.

Vienas iš elementariausių manipuliavimas styginiais veiksmai yra padalinti eilutę į kelias dalis. Tai būtų padaryta, pavyzdžiui, jei turite eilutę, pavyzdžiui"foo, bar, baz" ir tu nori trijų stygų „foo“, „bar“ ir „baz“. suskaidyti Styginių klasės metodas gali tai padaryti jums.

Pagrindinis „Split“ naudojimas

Pats paprasčiausias suskaidyti metodas yra padalinti eilutę pagal vieną ženklą arba statinę simbolių seką. Jei pirmasis skaidymo argumentas yra eilutė, tos eilutės simboliai naudojami kaip eilutės atskyriklis, o kableliais atskirtuose duomenyse kablelis naudojamas duomenims atskirti.

#! / usr / bin / env rubinas
str = "foo, bar, baz"
pateikia str.split („,“)
USD ./1.rb
foo
baras
baz

Pridėkite lankstumo naudodamiesi įprastomis išraiškomis

Yra paprastesnių būdų, kaip atskirti stygos. Jei naudojate reguliariąją išraišką kaip atskyriklį, skaidymo metodas tampa daug lankstesnis.

instagram viewer

Vėl paimkite, pavyzdžiui, stygą "foo, bar, baz". Po pirmo kablelio yra tarpas, bet ne po antrojo kablelio. Jei eilutė „,“ naudojama kaip atskyriklis, „juostos“ eilutės pradžioje vis tiek bus tarpas. Jei naudojama eilutė „,“ (su tarpu po kablelio), ji atitiks tik pirmąjį kablelį, nes antrame kablelyje po jo nėra tarpo. Tai labai riboja.

Šios problemos sprendimas yra naudoti įprastą išraišką kaip atskyrimo argumentą, o ne eilutę. Reguliarios išraiškos leidžia suderinti ne tik statines ženklų sekas, bet ir neapibrėžtą simbolių skaičių bei pasirenkamus ženklus.

Reguliarių išraiškų rašymas

Rašydamas reguliariąją savo atskyriklio išraišką, pirmiausia reikia žodžiais apibūdinti, kas yra atskyriklis. Tokiu atveju frazė „kablelis, po kurio gali būti vienas ar keli tarpai“ yra pagrįsta.

Yra du elementai šiai regex: kablelis ir pasirenkami tarpai. Tarpai bus naudojami * (žvaigždutė arba žvaigždutė) kiekybinis rodiklis, kuris reiškia „nulis ar daugiau“. Bet kuris elementas, kuris yra anksčiau, atitiks nulį ar daugiau kartų. Pavyzdžiui, regex /a*/ atitiks nulio ar daugiau „a“ simbolių seką.

#! / usr / bin / env rubinas
str = "foo, bar, baz"
deda str.split (/, * /)
USD ./2.rb
foo
baras
baz

Padalijimų skaičiaus ribojimas

Įsivaizduokite kableliais atskirtą reikšmių eilutę, tokią kaip "10,20,30, tai yra savavališka eilutė". Šis formatas yra trys skaičiai, po kurių eina komentaro stulpelis. Šiame komentarų stulpelyje gali būti savavališkas tekstas, įskaitant tekstą su kableliais. Apsaugoti suskaidyti neskaidydami šio stulpelio teksto, galime nustatyti maksimalų skiltinamų stulpelių skaičių.

Pastaba: Tai veiks tik tuo atveju, jei komentaro eilutė su savavališku tekstu yra paskutinis lentelės stulpelis.

Norėdami apriboti padalijimų skaičių, kurį atliks padalijimo metodas, kaip antrą argumentą perduokite eilutės laukų skaičių kaip padalijimo metodą, pavyzdžiui:

#! / usr / bin / env rubinas
str = "10,20,30, dešimt, dvidešimt ir trisdešimt"
deda str.split (/, * /, 4)
USD ./3.rb
10
20
30
Dešimt, dvidešimt ir trisdešimt

Premijos pavyzdys!

O kas, jei norėtum panaudoti suskaidyti gauti visus daiktus, išskyrus patį pirmąjį?

Tai iš tikrųjų labai paprasta:

pirma, * poilsis = ex.split (/, /)

Žinant apribojimus

Padalijimo metodas turi keletą gana didelių apribojimų.

Paimkite, pavyzdžiui, stygą '10, 20, „Bobas, Ieva ir Mallory“, 30 '. Kas yra ketinama, yra du skaičiai, po kurių eina cituota eilutė (kurioje gali būti kableliai) ir kitas numeris. Padalijimas negali teisingai atskirti šios eilutės į laukus.

Norint tai padaryti, turi būti naudojamas stygų skaitytuvas valstybinis, tai reiškia, kad jis gali atsiminti, ar jis yra cituojamos eilutės viduje, ar ne. Padalintas skaitytuvas nėra valstybinis, todėl negali išspręsti tokių problemų kaip šis.

instagram story viewer