Ruby: select, reject, collect ต่างกันอย่างไร?

หลายคนอาจจะเคยใช้ เมธอดเหล่านี้มาบ้างใน Ruby แต่วันนี้จะมาแสดงให้ดูกันว่า ทั้งสามตัวนี้แตกต่างกันอย่างไร

Select

จะเป็นการบอกว่าจะเลือกอะไรบ้าง โดยมีเงื่อนไขเป็นอย่างไร เช่น จะเลือกตัวที่ มีค่ามากกว่า 3 เท่านั้น ดังตัวอย่างด้านล่าง

array = [1,2,3,4,5]
array.select { |n| n > 3 }
=> [4, 5]

จากตัวอย่างก็จะทำการ return ค่าออกมา คืิอ [4,5] เท่านั้น

Reject

ตรงกันข้ามกับ Select เลย คือ ไม่เอาตัวที่ แล้วตามด้วยเงื่อนไข เช่น ไม่เอาตัวที่ มีค่าเท่ากับ 3

array = [1,2,3,4,5]
array.reject { |n| n == 3 }
=> [1, 2, 4, 5]

ก็ตรงไปตรงมา ไม่เอา 3 ก็ [1,2,4,5]

Collect

collect จะแตกต่างจากสองตัวบนนิดหน่อยคือ จะทำการ return ทุกค่าใน array ที่ได้จากการกระทำตามเงื่อนไข ใน block นั้นๆ และนำมาใส่ใน array ใหม่ ถ้าอ่านแล้ว งง มาดูตัวอย่าง

array = [1,2,3,4,5]
array.collect { |n| n * 3 }
=> [3, 6, 9, 12, 15]

จากตัวอย่างจะแสดงค่า ที่ได้จากการคูณกันแต่ละตัว(n)ใน block โดยการนำไปใส่ใน array ใหม่ ในแต่ละรอบ จนครบและ return เป็นค่าใหม่ออกมา

1 * 3 = 3 
2 * 3 = 6
3 * 3 = 9
4 * 3 = 12
5 * 3 = 15
=> [3, 6, 9, 12, 15]

อีกตัวอย่างนึง

alpha = ['a', 'b', 'c', 'd']
alpha.collect { |c| c.capitalize }
=> ["A", "B", "C", "D"]

เขียนแบบ ลดรูปก็จะได้หน้าตาแบบนี้

alpha = ['a', 'b', 'c', 'd']
alpha.collect(&:capitalize)
=> ["A", "B", "C", "D"]

จะทำการวน ทุกตัว และเปลี่ยนค่าเป็นตัวพิมพ์ใหญ่ทั้งหมด

ถึงแม้จะใช้ต่างกัน อยู่ที่การหยิบมาใช้ในแต่ละงาน แต่ สุดท้ายแล้ว ทั้ง 3 เมธอดนี้ จะ return ค่าออกมาเป็น array เหมือนกัน

สนใจอ่านเพิ่มเติม RubyDocs

วันนี้ฝากไว้เพียงเท่านี้

บริการ พัฒนาซอฟต์แวร์ แอปพลิเคชัน ตามความต้องการ!

เราเป็นผู้นำในด้านการให้บริการ พัฒนาซอฟต์แวร์ แอปพลิเคชัน และโซลูชันด้านไอที แบบครบวงจร (Full-stack) ตั้งแต่การให้คำปรึกษาไปจนถึงการ Maintenace ระบบ เรามีความตั้งใจที่จะเปลี่ยนให้ นวัตกรรม และไอเดีย ระดับโลกของคุณให้กลายเป็นซอฟต์แวร์ที่มีคุณภาพ โดยที่บริษัทรับพัฒนาซอฟต์แวร์ เขียนโปรแกรม และ แอปพลิเคชัน ตามความต้องการทางธุรกิจคุณได้ ทุกรูปแบบ ทุกประเภท ทุกความต้องการทางธุรกิจ หากคุณมีไอเดียดีๆ ที่ต้องการพัฒนา Software หรือ พัฒนา Application สามารถปรึกษาเราได้ที่นี่!