reduce และ each_with_object
รวมค่าจากคอลเลกชัน
reduce และ each_with_object เป็นบทเรียน Ruby Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Ruby Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน
reduce คืออะไร
reduce (ชื่อพ้องคือ inject) รวมสมาชิกทั้งหมดให้เป็นค่าเดียว บล็อกจะได้รับตัวสะสมและสมาชิกปัจจุบัน
sum = [1, 2, 3, 4].reduce(0) { |acc, n| acc + n }
puts sumการทำงานของตัวสะสม
ตัวสะสมจะเก็บผลลัพธ์ที่ค่อย ๆ ได้ระหว่างการวนซ้ำ ผลลัพธ์ใดก็ตามที่บล็อกคืนค่าจะกลายเป็นตัวสะสมตัวถัดไป
[1, 2, 3].reduce(0) do |acc, n|
puts "acc=#{acc} n=#{n}"
acc + n
endreduce โดยไม่มีค่าเริ่มต้น
หากไม่มีค่าเริ่มต้น สมาชิกตัวแรกจะกลายเป็นตัวสะสม และการวนซ้ำจะเริ่มจากสมาชิกตัวที่สอง
puts [10, 20, 30].reduce { |acc, n| acc + n }reduce ด้วยสัญลักษณ์
สำหรับตัวดำเนินการง่าย ๆ ให้ส่งสัญลักษณ์ เช่น :+ หรือ :* แทนการใช้บล็อก
puts [1, 2, 3, 4].reduce(:+)
puts [1, 2, 3, 4].reduce(:*)การค้นหาค่าสูงสุด
reduce สามารถคำนวณสิ่งที่มากกว่าผลรวมได้ เช่น ค่าที่มากที่สุด
nums = [3, 9, 2, 7]
max = nums.reduce { |acc, n| n > acc ? n : acc }
puts maxการสร้างสตริง
ตัวสะสมสามารถเป็นข้อมูลชนิดใดก็ได้ รวมถึงสตริงที่คุณค่อย ๆ สร้างขึ้น
letters = ["r", "u", "b", "y"]
word = letters.reduce("") { |acc, c| acc + c.upcase }
puts wordeach_with_object คืออะไร
each_with_object คล้ายกับ reduce แต่คุณส่งออบเจกต์ที่เปลี่ยนแปลงได้ให้เมธอด และออบเจกต์นั้นจะถูกคืนค่าโดยอัตโนมัติ คุณเปลี่ยนออบเจกต์ภายในบล็อก
result = [1, 2, 3].each_with_object([]) do |n, arr|
arr << n * 2
end
puts result.inspectการสร้างแฮช
each_with_object เหมาะอย่างยิ่งสำหรับการสร้างแฮช เพราะคุณไม่จำเป็นต้องคืนค่าออบเจกต์ทุกครั้ง
words = ["apple", "pear"]
lengths = words.each_with_object({}) do |w, h|
h[w] = w.length
end
puts lengthsการนับจำนวนครั้งที่ปรากฏ
ใช้แฮชเริ่มต้นร่วมกับ each_with_object เพื่อสะสมจำนวนรายการ
votes = ["a", "b", "a", "a"]
tally = votes.each_with_object(Hash.new(0)) do |v, h|
h[v] += 1
end
puts tallyreduce เทียบกับ each_with_object
ใช้ reduce เมื่อแต่ละขั้นตอนคืนค่าใหม่ เช่น ผลรวมและผลคูณ ใช้ each_with_object เมื่อคุณเปลี่ยนแปลงคอนเทนเนอร์เดียว เช่น อาร์เรย์หรือแฮช
puts [1, 2, 3].reduce(:+)
puts [1, 2, 3].each_with_object([]) { |n, a| a << n }.inspectทางลัดสำหรับการนับ
สำหรับการนับ Ruby มีเมธอด tally ในตัวที่จัดการงานนี้ให้คุณ
puts ["a", "b", "a"].tallyตรวจสอบความเข้าใจ
ตรวจสอบทักษะการรวมค่า
สรุป
ตอนนี้คุณสามารถรวมค่าจากคอลเลกชันได้แล้ว:
reduce/injectพร้อมตัวสะสม ค่าเริ่มต้น หรือสัญลักษณ์each_with_objectสำหรับสร้างอาร์เรย์และแฮชtallyสำหรับนับจำนวนอย่างรวดเร็ว- เลือกใช้ reduce เมื่อแต่ละขั้นตอนสร้างค่าใหม่ และใช้ each_with_object กับคอนเทนเนอร์ที่เปลี่ยนแปลงได้
หลักสูตรถัดไป: ตัวเลขและคณิตศาสตร์
puts (1..5).reduce(:*)คำถามที่พบบ่อย
บทเรียน “reduce และ each_with_object” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “reduce และ each_with_object” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Ruby Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “reduce และ each_with_object”
รวมค่าจากคอลเลกชัน คุณปฏิบัติ Ruby Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Ruby Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Ruby Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “reduce และ each_with_object” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Ruby Academy นี้ได้ไหม
ได้ บทเรียน Ruby Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การสร้างช่วง
- มอดูล Enumerable
- map, select, reject
- reduce และ each_with_object