Menyertakan Enumerable
Dapatkan map/select secara otomatis.
Menyertakan Enumerable adalah pelajaran Ruby Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Ruby Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Ruby Academy mencakup 4 pelajaran total.
Dapatkan map/select Secara Gratis
Setelah kelas Anda memiliki each, menyertakan Enumerable langsung memberi Anda map, select, reduce, sort, min, max, dan banyak lagi, yang semuanya dibangun di atas each Anda.
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 }Kontraknya
Kesepakatannya sederhana: sertakan Enumerable dan tentukan each. Enumerable memanggil each Anda secara internal untuk menjalankan semua hal lainnya.
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_aPenyaringan dengan select
select mempertahankan elemen ketika blok menghasilkan nilai benar. reject melakukan kebalikannya.
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?)Agregasi dengan reduce
reduce melipat koleksi menjadi satu nilai.
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(:+)Minimum, maksimum, pengurutan
Metode berbasis perbandingan dapat digunakan selama elemen Anda dapat dibandingkan.
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.sortPencarian dan Keanggotaan
find mengembalikan elemen pertama yang cocok; include? memeriksa keanggotaan.
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 dan partition
Enumerable menyediakan pembantu pengelompokan yang andal.
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?)Pengurutan Memerlukan Elemen yang Dapat Dibandingkan
Jika elemen Anda berupa objek khusus, berikan <=> kepada objek tersebut melalui modul yang dapat dibandingkan agar sort, min, dan max mengetahui cara mengurutkannya.
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.priceeach dengan Indeks
Enumerable juga menyediakan each_with_index dan each_with_object untuk iterasi yang lebih kaya.
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}"
endMerangkai Metode
Karena metode-metode ini mengembalikan larik atau enumerator, Anda dapat merangkainya menjadi alur pemrosesan yang ekspresif.
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 resultMenyatukan Semuanya
Menyertakan Enumerable memberikan manfaat besar:
- Tentukan
eachsekali. - Dapatkan map, select, reduce, pengurutan, pencarian, group_by, dan puluhan lainnya.
- Tambahkan kemampuan membandingkan pada elemen untuk metode pengurutan.
class Range5
include Enumerable
def each; (1..5).each { |n| yield n }; end
end
puts Range5.new.sumPemeriksaan Singkat
Uji pemahaman Anda tentang penyertaan Enumerable.
Rangkuman
Anda telah mempelajari cara menyertakan Enumerable:
- Tentukan
each, sertakan modulnya, lalu dapatkan seluruh perangkat metode. - map/select/reduce/find/group_by semuanya berjalan menggunakan
eachAnda. - Pengurutan elemen memerlukan
<=>. - Metode dapat dirangkai menjadi alur pemrosesan.
class Tens
include Enumerable
def each; [10, 20, 30].each { |n| yield n }; end
end
p Tens.new.map { |n| n + 1 }Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menyertakan Enumerable” gratis?
Ya — teks lengkap “Menyertakan Enumerable” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Ruby Academy, upgrade ke CoddyKit PRO. Kursus Ruby Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Menyertakan Enumerable”?
Dapatkan map/select secara otomatis. Kamu berlatih Ruby Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Ruby Academy?
Tidak diperlukan pengalaman sebelumnya. Ruby Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Menyertakan Enumerable” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Ruby Academy ini?
Ya. Setiap pelajaran Ruby Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Menulis each Kustom
- Menyertakan Enumerable
- Enumerator Malas
- Objek Enumerator