mik*_*kom 2 string clojure matching
如果存在不区分大小写的匹配,从字符串数组中删除字符串的惯用 clojure 方法是什么?
我需要保留结果的大小写(我总是想保留不敏感匹配的第一次出现)。
简单的例子:
(distinct-case-insensitive ["fish" "Dog" "cat"] ["FISH "DOG"])
Run Code Online (Sandbox Code Playgroud)
会回来
["fish" "Dog" "cat"]
Run Code Online (Sandbox Code Playgroud)
这是我想出的解决方案。为了简化功能,它只接受一个带有重复项的列表,因此如果您(apply concat lists)之前需要可变参数列表。
(defn distinct-case-insensitive [xs]
(->> xs
(group-by clojure.string/lower-case)
(vals)
(map first)))
(distinct-case-insensitive ["fish" "Dog" "cat" "Fish" "DOG"]) =>
("fish" "Dog" "cat")
Run Code Online (Sandbox Code Playgroud)
但是,正如列昂尼德提到的那样,由于哈希图,它不会保留顺序。对于订购的解决方案使用
(defn distinct-case-insesitive [xs]
(->> xs
(group-by clojure.string/lower-case)
(#(map % (map clojure.string/lower-case xs)))
(map first)
(distinct)))
Run Code Online (Sandbox Code Playgroud)