1

さまざまな文字列でキーをフィルタリングしようとしています。次のように、1 つの固定文字列でフィルタリングできます。

(filter #(= (:TEST_KEY %) "TEST: 1")records)

TEST: 2"それは機能しますが、 "とも含めることができるようにする必要があり"TEST: ABC"ます。フィルターを複数の値で機能させるにはどうすればよいですか?"TEST: *"私が知らないようなワイルドカードでフィルター処理する方法はありますか?

4

2 に答える 2

3

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)

上記の構文は集合リテラルであり、無名関数の構文#{}とは何の関係もないことに注意してください。#()

于 2013-04-25T18:12:42.633 に答える