Enumerable-kokoelmien käsittely
Tutustukaa listojen, karttojen ja muiden enumerable-kokoelmien tehokkaaseen käsittelyyn Elixirin `Enum`-moduulilla.
Enumerable-kokoelmien käsittely on ilmainen Elixir ja Phoenix: skaalautuva backend-kehitys-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Elixir ja Phoenix: skaalautuva backend-kehitys-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Elixir ja Phoenix: skaalautuva backend-kehitys-kurssilla on yhteensä 4 oppituntia.
Mitä ovat lueteltavat kokoelmat?
Elixirissä lueteltava on tietorakenne, jonka alkiot voidaan käydä läpi yksi kerrallaan. Niitä voi ajatella useiden arvojen säiliöinä.
Elixirin tehokas Enum-moduuli tarjoaa monia funktioita näiden kokoelmien tehokkaaseen käsittelyyn.
- Listat: minkä tahansa tietotyypin järjestettyjä kokoelmia.
- Mapit: avain–arvo-säilöjä.
- Välit: lukujen sarjoja.
Lueteltavien kokoelmien ymmärtäminen on funktionaalisen Elixir-ohjelmoinnin perusta.
Elixir-listojen käsittely
Listat ovat ehkä yleisin lueteltava kokoelma. Ne ovat järjestettyjä ja voivat sisältää eri tietotyyppejä.
Katsotaan yksinkertaista listaa:
defmodule ListExample do
def run do
my_list = [1, "hello", :atom, 4.5]
IO.puts "My list: #{inspect my_list}"
end
end
ListExample.run()Map-rakenteet Enum-kokoelmina
Map-rakenteet tallentavat dataa avain–arvo-pareina. Vaikka niiden ensisijainen käyttötarkoitus on hakeminen, ne ovat myös lueteltavia, joten niiden avain–arvo-parit voidaan käydä läpi.
Map-rakennetta läpikäytäessä jokainen alkio on tupla {key, value}.
defmodule MapExample do
def run do
my_map = %{name: "Alice", age: 30}
IO.puts "My map: #{inspect my_map}"
end
end
MapExample.run()`Enum`-moduulin esittely
Enum-moduuli on Elixirin vakiokirjasto, jolla käsitellään kaikenlaisia enumerable-rakenteita. Se tarjoaa yhdenmukaisen rajapinnan yleisiin toimintoihin.
Silmukoiden kirjoittamisen sijaan käytätte Enum-funktioita kokoelmien muuntamiseen, suodattamiseen ja yhdistämiseen muuttumattomalla ja funktionaalisella tavalla.
- Tietoja ei muuteta paikallaan.
- Funktiot palauttavat uusia kokoelmia.
- Koodi pysyy selkeänä ja tiiviinä.
Toimintojen suorittaminen `Enum.each`-funktiolla
Enum.each/2-funktiota käytetään, kun haluatte suorittaa sivuvaikutuksen enumerable-rakenteen jokaiselle alkiolle, esimerkiksi tulostaa konsoliin. Se palauttaa aina arvon :ok.
Se muistuttaa muiden kielten for-each-silmukkaa, mutta sitä käytetään ainoastaan sivuvaikutusten tuottamiseen.
defmodule EachExample do
def run do
numbers = [1, 2, 3]
IO.puts "Using Enum.each:"
Enum.each(numbers, fn num -> IO.puts "Number: #{num}" end)
end
end
EachExample.run()Tietojen muuntaminen `Enum.map`-funktiolla
Enum.map/2 käyttää annettua funktiota enumerable-rakenteen jokaiseen alkioon ja kerää tulokset uudeksi listaksi. Se sopii erinomaisesti tietojen muuntamiseen.
Alkuperäinen enumerable-rakenne säilyy muuttumattomana funktionaalisen ohjelmoinnin periaatteiden mukaisesti.
defmodule MapTransformExample do
def run do
numbers = [1, 2, 3]
doubled_numbers = Enum.map(numbers, fn num -> num * 2 end)
IO.puts "Original: #{inspect numbers}"
IO.puts "Doubled: #{inspect doubled_numbers}"
end
end
MapTransformExample.run()Alkioiden valitseminen `Enum.filter`-funktiolla
Enum.filter/2 luo uuden listan, joka sisältää vain alkiot, joille annettu funktio palauttaa "totuusarvoisen" arvon (kaiken muun paitsi false- tai nil-arvon).
Käyttäkää sitä, kun haluatte valita kokoelmasta tietyn osajoukon alkioita.
defmodule FilterExample do
def run do
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = Enum.filter(numbers, fn num -> rem(num, 2) == 0 end)
IO.puts "All numbers: #{inspect numbers}"
IO.puts "Even numbers: #{inspect even_numbers}"
end
end
FilterExample.run()Kokoelmien pelkistäminen `Enum.reduce`-funktiolla
Enum.reduce/3 (tai Enum.reduce/2) on yksi tehokkaimmista Enum-funktioista. Se "pelkistää" enumerablen yhdeksi arvoksi käyttämällä funktiota toistuvasti.
Annette alkuperäisen akkumulaattorin arvon sekä funktion, joka vastaanottaa nykyisen alkion ja akkumulaattorin ja palauttaa uuden akkumulaattorin.
defmodule ReduceExample do
def run do
numbers = [1, 2, 3, 4]
sum = Enum.reduce(numbers, 0, fn num, acc -> num + acc end)
IO.puts "Numbers: #{inspect numbers}"
IO.puts "Sum: #{sum}"
end
end
ReduceExample.run()Muita tuntemisen arvoisia `Enum`-funktioita
Enum-moduuli on laaja! Tässä on muutama hyödyllinen funktio:
Enum.all?(enum, fun): Tarkistaa, täyttävätkö kaikki alkiot ehdon.Enum.any?(enum, fun): Tarkistaa, täyttääkö jokin alkio ehdon.Enum.take(enum, n): Palauttaa ensimmäisetnalkiota.Enum.drop(enum, n): Palauttaa kaikki alkiot ensimmäistennalkion jälkeen.Enum.sort(enum): Järjestää alkiot.
Tutustukaa Elixirin viralliseen dokumentaatioon, josta löydätte täydellisen luettelon!
Testatkaa `Enum`-osaamistanne
Tarkastellaan seuraavaa Elixir-koodikatkelmaa:
defmodule QuestionCode do
def run do
data = [1, 2, 3, 4, 5]
result_a = Enum.map(data, fn x -> x * 10 end)
result_b = Enum.filter(data, fn x -> rem(x, 2) == 0 end)
result_c = Enum.reduce(data, 0, fn x, acc -> x + acc end)
IO.puts "A: #{inspect result_a}"
IO.puts "B: #{inspect result_b}"
IO.puts "C: #{inspect result_c}"
end
end
QuestionCode.run()Kertaus: Enumerablen voima
Hienoa työtä! Olette oppineet Elixirin enumerable-kokoelmien käsittelyn perusteet.
- Enumerables ovat tietorakenteita, joiden läpi voidaan iteroida (listat, mapit ja alueet).
Enum-moduuli tarjoaa tehokkaita funktioita yhdenmukaisiin ja muuttumattomiin operaatioihin.- Keskeisiä funktioita ovat
each(sivuvaikutukset),map(muuntaminen),filter(valitseminen) jareduce(yhdistäminen).
Nämä funktiot ovat Elixirin funktionaalisen ohjelmoinnin kulmakiviä, ja niiden avulla tietoja voidaan käsitellä selkeästi ja tehokkaasti.
Opi Elixir tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”Enumerable-kokoelmien käsittely” ilmainen?
Kyllä – oppitunnin ”Enumerable-kokoelmien käsittely” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Elixir ja Phoenix: skaalautuva backend-kehitys-kurssin, päivitä CoddyKit PROhon. Elixir ja Phoenix: skaalautuva backend-kehitys-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Enumerable-kokoelmien käsittely”?
Tutustukaa listojen, karttojen ja muiden enumerable-kokoelmien tehokkaaseen käsittelyyn Elixirin `Enum`-moduulilla. Harjoittelet Elixir ja Phoenix: skaalautuva backend-kehitys-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Elixir ja Phoenix: skaalautuva backend-kehitys-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Elixir ja Phoenix: skaalautuva backend-kehitys-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Enumerable-kokoelmien käsittely”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Elixir ja Phoenix: skaalautuva backend-kehitys-oppitunnilla?
Kyllä. Jokainen Elixir ja Phoenix: skaalautuva backend-kehitys-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Funktiot, moduulit ja putkiketjutus
- Enumerable-kokoelmien käsittely
- Rekursio ja korkeamman asteen funktiot
- Laiska evaluointi Stream-moduulilla