Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Clojure中筛选多个值或通配符?_Clojure_Filter - Fatal编程技术网

如何在Clojure中筛选多个值或通配符?

如何在Clojure中筛选多个值或通配符?,clojure,filter,Clojure,Filter,我正在尝试筛选各种字符串上的键。我可以在一个固定字符串上进行筛选,如下所示: (filter #(= (:TEST_KEY %) "TEST: 1")records) 虽然这样做有效,但我还需要能够包括“TEST:2”和“TEST:ABC”。如何让筛选器处理多个值?有没有一种方法可以过滤我不知道的通配符,比如“TEST:*”?米切尔·博肯特的答案涵盖了通配符的情况。如果存在枚举的选项集,clojure允许将文本集用作测试成员资格的函数。这可以习惯地与过滤器一起使用(因为clojure中除nil

我正在尝试筛选各种字符串上的键。我可以在一个固定字符串上进行筛选,如下所示:

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

虽然这样做有效,但我还需要能够包括“
TEST:2”
“TEST:ABC”
。如何让筛选器处理多个值?有没有一种方法可以过滤我不知道的通配符,比如
“TEST:*”

米切尔·博肯特的答案涵盖了通配符的情况。如果存在枚举的选项集,clojure允许将文本集用作测试成员资格的函数。这可以习惯地与
过滤器一起使用(因为clojure中除nil或false之外的所有值都是真实的)

(filter #(.startsWith (:TEST_KEY % "") "TEST: ")      
        [{:TEST_KEY "TEST: 1"} {:TEST_KEY "TEST: 2"} {:NONSENSE "foo"}])

;; or equivalently

(filter #(re-find #"TEST: .*"        ;; use regular expression to match
                  (:TEST_KEY % ""))  ;; get value of :TEST_KEY, 
                                     ;; use empty string as default 
        [{:TEST_KEY "TEST: 1"} {:TEST_KEY "TEST: 2"} {:NONSENSE "foo"}])
;;=> ({:TEST_KEY "TEST: 1"} {:TEST_KEY "TEST: 2"})
我使用
comp
创建一个函数,该函数首先查找记录中的键,然后使用一个集合对其进行测试:

(filter (comp #{"TEST: 1" "TEST: 2" "TEST: ABC"} :TEST_KEY) records)

请注意,上面的
{}
语法是一个集合文字,与
{code>匿名函数语法无关。

Michiel Borkent的答案涵盖了通配符的情况。如果存在枚举的选项集,clojure允许将文本集用作测试成员资格的函数。这可以习惯地与
过滤器一起使用(因为clojure中除nil或false之外的所有值都是真实的)

我使用
comp
创建一个函数,该函数首先查找记录中的键,然后使用一个集合对其进行测试:

(filter (comp #{"TEST: 1" "TEST: 2" "TEST: ABC"} :TEST_KEY) records)
请注意,上面的
#{}
语法是一个集合文字,与
#()
匿名函数语法无关