0Pricing
Ruby Academy · บทเรียน

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
end

reduce โดยไม่มีค่าเริ่มต้น

หากไม่มีค่าเริ่มต้น สมาชิกตัวแรกจะกลายเป็นตัวสะสม และการวนซ้ำจะเริ่มจากสมาชิกตัวที่สอง

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 word

each_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 tally

reduce เทียบกับ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การสร้างช่วง
  2. มอดูล Enumerable
  3. map, select, reject
  4. reduce และ each_with_object
← กลับไปที่ Ruby Academy