Monthly Archives: July 2014

เทคนิค filter collection หล่อๆ ของ Clojure ด้วย set

โจทย์คือเราต้องการเลือก element จาก list สำหรับ element ที่มีค่าตรงกับค่าที่ระบุ

เริ่มด้วย Ruby กันก่อน เราอาจจะทำด้วยวิธีต่างๆ ดังนี้

(1..5).select { |e| e == 2 || e == 3 } # => [2, 3]

## ใช้ array เมื่อเริ่มมีหลายตัว
to_take = [2,3,5,7]
(1..10).select { |e| to_take.include?(e) } # => [2, 3, 5, 7]

## ใช้ set เพื่อ performance ที่ดีขึ้น
require 'set'
to_take = Set.new([2,3,5,7])
(1..10).select { |e| to_take.member?(e) } # => [2, 3, 5, 7]

มาดูเทคนิคที่ว่านี้บน Clojure กัน

(filter #{2 3 5 7} [1 2 3 4 5 6 7 8 9 10]) ;=> (2 3 5 7)
; หรือถ้าเรียกใช้ range แทน
(filter #{2 3 5 7} (range 1 11)) ;=> (2 3 5 7)

Continue reading