selectreject

此頁面說明集合管線模式中的操作。如需更多背景資訊,請閱讀

篩選

對每個元素執行布林函數,並僅將通過的元素放入輸出。

您可以使用此函數僅保留您想要處理的輸入項目。例如

ruby…
[1,2,3,4].select {|i| i.even?} 
# => [2, 4]
clojure…
(filter even? [1 2 3 4])
;; => (2 4)

許多語言使用術語「select」表示此操作。「select」字眼的優點是「reject」形成一個自然的補語。

ruby…
[1,2,3,4].select {|i| i.even?} 
# => [2, 4]
[1,2,3,4].reject {|i| i.even?} 
# => [1, 3]

「remove」有時用於「reject」,其中語言使用「filter」。

使用「select」作為名稱最大的缺點是,有些程式庫(例如 dot net 的 Linq)使用「select」作為 map 的名稱(根據 SQL 的用法,其中「select」會對欄位子集進行投影,這是 map 的一種特殊形式)。

與許多操作一樣,過濾雜湊會涉及一些難題。將單一參數解構為鍵和值對於支援它的語言(例如 Clojure)來說很有效。

clojure…
(filter (fn [[k,v]] (> v 2)) {:BR 5, :IT 4, :ES 1} )
;; => ([:IT 4] [:BR 5])

OO 語言需要在雜湊類別上定義一個篩選操作 - ruby 使用 select 來執行此操作。

ruby…
{BR: 5, IT: 4, ES: 1}.select{|k,v| v > 2}
# => {:BR=>5, :IT=>4}