Ruby Academy · Oppitunti

Enumerable-moduulin sisällyttäminen

Saat map- ja select-metodit käyttöösi.

Oppitunti 2/413 vaihetta

Enumerable-moduulin sisällyttäminen on ilmainen Ruby Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Ruby Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Ruby Academy-kurssilla on yhteensä 4 oppituntia.

map ja select kaupan päälle

Kun luokassasi on each, Enumerable-mixin lisää välittömästi käyttöösi map-, select-, reduce-, sort-, min-, max-metodit ja monia muita. Kaikki perustuvat omaan each-metodiisi.

class Bag
  include Enumerable
  def initialize(*x); @x = x; end
  def each; @x.each { |i| yield i }; end
end
p Bag.new(1, 2, 3).map { |n| n * 10 }

Sopimus

Sopimus on yksinkertainen: liitä Enumerable mukaan ja määrittele each. Enumerable kutsuu sisäisesti omaa each-metodiasi ja käyttää sitä kaiken muun perustana.

class Squares
  include Enumerable
  def initialize(n); @n = n; end
  def each
    (1..@n).each { |i| yield i * i }
  end
end
p Squares.new(5).to_a

Suodatus select-metodilla

select säilyttää alkiot, joiden kohdalla lohkon tulos on tosi. reject toimii päinvastoin.

class Nums
  include Enumerable
  def initialize(*x); @x = x; end
  def each; @x.each { |i| yield i }; end
end
n = Nums.new(1, 2, 3, 4, 5, 6)
p n.select(&:even?)
p n.reject(&:even?)

Aggregointi reduce-metodilla

reduce yhdistää kokoelman yhdeksi arvoksi.

class Cart
  include Enumerable
  def initialize(*p); @p = p; end
  def each; @p.each { |i| yield i }; end
end
puts Cart.new(5, 10, 15).reduce(:+)

min, max, sort

Vertailuun perustuvat metodit toimivat, kunhan alkiot ovat vertailukelpoisia.

class Scores
  include Enumerable
  def initialize(*n); @n = n; end
  def each; @n.each { |i| yield i }; end
end
s = Scores.new(7, 2, 9, 4)
puts s.min
puts s.max
p s.sort

find ja include?

find palauttaa ensimmäisen vastaavan alkion ja include? tarkistaa jäsenyyden.

class Words
  include Enumerable
  def initialize(*w); @w = w; end
  def each; @w.each { |x| yield x }; end
end
w = Words.new("cat", "dog", "bird")
puts w.find { |x| x.length == 4 }
puts w.include?("dog")

group_by ja partition

Enumerable tarjoaa tehokkaita ryhmittelyapureita.

class Nums
  include Enumerable
  def initialize(*x); @x = x; end
  def each; @x.each { |i| yield i }; end
end
n = Nums.new(1, 2, 3, 4, 5)
p n.group_by(&:even?)
p n.partition(&:odd?)

Lajittelu tarvitsee vertailukelpoiset alkiot

Jos alkiosi ovat mukautettuja olioita, anna niille <=> (Comparable-mixin avulla), jotta sort-, min- ja max-metodit tietävät niiden järjestyksen.

Item = Struct.new(:price) do
  include Comparable
  def <=>(o); price <=> o.price; end
end
class Shelf
  include Enumerable
  def initialize(*i); @i = i; end
  def each; @i.each { |x| yield x }; end
end
shelf = Shelf.new(Item.new(30), Item.new(10), Item.new(20))
p shelf.min.price

each_with_index

Enumerable tarjoaa myös each_with_index- ja each_with_object-metodit monipuolisempaan iteraatioon.

class Letters
  include Enumerable
  def initialize(*l); @l = l; end
  def each; @l.each { |x| yield x }; end
end
Letters.new("a", "b", "c").each_with_index do |letter, i|
  puts "#{i}: #{letter}"
end

Metodien ketjuttaminen

Koska nämä metodit palauttavat taulukoita tai enumeraattoreita, voit ketjuttaa ne ilmaisuvoimaisiksi käsittelyketjuiksi.

class Nums
  include Enumerable
  def initialize(*x); @x = x; end
  def each; @x.each { |i| yield i }; end
end
result = Nums.new(1, 2, 3, 4, 5, 6).select(&:even?).map { |n| n * n }
p result

Kokonaisuus

Enumerable-mixin mukaan ottamisesta on suuri hyöty:

  • Määrittele each kerran.
  • Saat käyttöösi map-, select-, reduce-, sort-, find-, group_by-metodit ja kymmeniä muita.
  • Lisää alkioihin Comparable-mixin, jotta saat järjestämiseen tarvittavat metodit.
class Range5
  include Enumerable
  def each; (1..5).each { |n| yield n }; end
end
puts Range5.new.sum

Pikatarkistus

Testaa, miten hyvin ymmärrät Enumerable-mixin mukaan ottamisen.

Kertaus

Opit ottamaan Enumerable-mixin mukaan:

  • Määrittele each, liitä moduuli mukaan ja saat koko työkalupakin.
  • map-, select-, reduce-, find- ja group_by-metodit toimivat kaikki oman each-metodisi päällä.
  • Alkioiden järjestäminen tarvitsee <=>-metodin.
  • Metodit voidaan ketjuttaa käsittelyketjuiksi.
class Tens
  include Enumerable
  def each; [10, 20, 30].each { |n| yield n }; end
end
p Tens.new.map { |n| n + 1 }
Aloita maksutta

Opi Ruby 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
29
Oppitunnit
109

Usein kysytyt kysymykset

Onko oppitunti ”Enumerable-moduulin sisällyttäminen” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Ruby Academy-oppimispolun 3 oppituntia, myös oppitunnin “Enumerable-moduulin sisällyttäminen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Ruby Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Enumerable-moduulin sisällyttäminen”?

Saat map- ja select-metodit käyttöösi. Harjoittelet Ruby Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Ruby Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Ruby Academy-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-moduulin sisällyttäminen”-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ä Ruby Academy-oppitunnilla?

Kyllä. Jokainen Ruby Academy-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

  1. Mukautetun each-metodin kirjoittaminen
  2. Enumerable-moduulin sisällyttäminen
  3. Laiskat enumeratorit
  4. Enumerator-oliot
← Takaisin: Ruby Academy