さまざまな文字列でキーをフィルタリングしようとしています。次のように、1 つの固定文字列でフィルタリングできます。
(filter #(= (:TEST_KEY %) "TEST: 1")records)
TEST: 2"
それは機能しますが、 "とも含めることができるようにする必要があり"TEST: ABC"
ます。フィルターを複数の値で機能させるにはどうすればよいですか?"TEST: *"
私が知らないようなワイルドカードでフィルター処理する方法はありますか?
Michiel Borkent's answer は、ワイルドカード ケースをカバーしています。列挙されたオプションのセットがある場合、clojure ではメンバーシップをテストする関数としてリテラル セットを使用できます。これは慣用的に使用できますfilter
(clojure では nil または false 以外のすべての値が true であるため)。
user> (#{"A" "B"} "A")
;;=> "A"
user> (#{"A" "B"} "C")
;;=> nil
comp
最初にレコード内のキーを検索し、次にセットでテストする関数を作成するために使用します。
(filter (comp #{"TEST: 1" "TEST: 2" "TEST: ABC"} :TEST_KEY) records)
上記の構文は集合リテラルであり、無名関数の構文#{}
とは何の関係もないことに注意してください。#()