2013-04-25 2 views
1

다양한 문자열에서 키를 필터링하려고합니다. 나는 이런 식으로 하나의 고정 문자열을 필터링 할 수 있습니다Clojure에서 여러 값이나 와일드 카드를 필터링하려면 어떻게해야합니까?

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

을 그 작동하지만, 나 또한 내가 여러 값에 일할 수있는 필터를 얻을 수있는 방법 TEST: 2""TEST: ABC" 방법이 있나요 "를 포함 할 수 있어야합니다.? 내가?

의 인식이다 "TEST: *" 같은 와일드 카드 필터링 할

답변

3

미키 엘 Borkent의 대답 옵션 Clojure에서의 열거 세트가 와일드 카드 케이스.를 테스트 함수로 문자 세트의 사용을 허용 커버 이 값은 filter으로 관용적으로 사용할 수 있습니다 (모든 값이 clojure에서 nil 또는 false보다 그녀가 진실입니다).

user> (#{"A" "B"} "A") 
;;=> "A" 
user> (#{"A" "B"} "C") 
;;=> nil 

내가 먼저 레코드의 키를 조회하는 기능을 만들 수 comp를 사용하여 다음 세트를 테스트 : 위의 #{} 구문은 일련의 문자이고 가지고

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

주 익명 함수 구문 인 #()과 관련이 없습니다.

2
(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"}) 
관련 문제