Ruby: Inject

New Panuwat
Swiftlet Tech
Published in
1 min readJul 29, 2019
photo by Derick Anies

Inject เป็น method ของ ruby ที่อยู่ใน module Enumerable ของRuby ที่มีให้เราได้เรียกใช้กัน ซึ่งโดยวิธีการใช้ก็ไม่ยาก เราจะใช้ก็ต่อเมื่อ ต้องการ ใส่อะไรก็ตามที่เราต้องการใส่ในขณะวนลูป (ตอนนี้ที่ใส่ได้จะมี Array, Hash, Number) ตัวอย่างเช่น

ปกติหากเราต้องการวนลูป arr= [1,2,3] และ ให้ใส่ ค่าของ อาร์เรย์ แต่ละตัวไว้ใน hash เราจะต้องทำอย่างไร

hash = {}
arr.each do |num|
hash[num] = num
end
# => {"1"=>"1", "2"=>"2", "3"=>"3"}

ถ้าเรานำ inject เข้ามาใช้

result = arr.inject({}) do |hash, num|
hash[num] = num
hash
end
# => {"1"=>"1", "2"=>"2", "3"=>"3"}

arr.inject({}) จะเป็นการ initial ค่าไว้ว่าให้เริ่มต้นเป็นอะไร ทำให้เราไม่ต้องประกาศ hash เปล่าไว้ก่อน

อีกท่าหนึ่งเราสามารถใช้ each_with_object ได้เหมือนกันขึ้นอยู่กับสถานการณ์

arr.each_with_object({}) { |num, hash| hash[num] = num }
# => {"1"=>"1", "2"=>"2", "3"=>"3"}

ในตัวอย่างด้านบน จะเป็นการInject hash เข้าไป

หรือจะเป็นการหาค่าผลรวม

result = arr.inject(0) { |sum, num| sum += num }
# => 6

ส่วนนี้เราจะ initial ค่า 0 ให้ ตัวแปร sum ไว้ก่อนเลย จากนั้นก็วนไปจนจบ

จากตัวอย่างทั้งหมด จะเห็นได้ว่า inject จะช่วยให้เราเขียนโค้ดได้สั้นลงและประหยัดเวลามากขึ้น มีเวลาไปเขียนส่วนอื่นๆต่อได้นั่นเอง

ใครสนใจดูเพิ่มเติมไปดูต่อได้ที่ Ruby Doc

ขอบคุณครับ

--

--