任务
删除匹配的 second-array 中每个字符串的 first-array 中的每个子字符串。
在Clojure中最好的方法是什么?
示例:
first-array: [“Adam”“Goolan”“傻”]
第二阵列: [“a”“oo”“ll”]
结果: [“Adm”“Gln”“siy”]
请注意,如果
,结果应该相同第二阵列: [“oo”“ll”“a”]
答案 0 :(得分:2)
如果是匹配元素(即第一项中的第一项与第二项中的第一项匹配,依此类推):
> (defn the-quest [xs ys]
(map #(clojure.string/replace (first %1) (second %1) "") (map vector xs ys)))
#'sandbox1427/the-quest
> (the-quest ["Adam" "Goolan" "silly"] ["a" "oo" "ll"])
("Adm" "Glan" "siy")
见@ Lee的评论如下:
> (map #(clojure.string/replace %1 %2 "") ["Adam" "Goolan" "silly"] ["a" "oo" "ll"])
("Adm" "Glan" "siy")
>
注意 - 上述http://www.tryclj.com/
的礼貌任意对任何匹配:
user=> (defn repl-all [x ys]
#_=> (reduce #(clojure.string/replace %1 %2 "") x ys))
user=> (defn the-quest [xs ys]
#_=> (map #(repl-all %1 ys) xs))
user=> (the-quest ["Adam" "Goolan" "silly"] ["a" "oo" "ll"])
("Adm" "Gln" "siy")
答案 1 :(得分:1)
问题的两个略有不同的表述,你的例子并不能说明你想要的内容:
如果您想要的是第二种情况,那么似乎需要注意。如果是第一种情况,我建议像
那样(import java.util.regex.Pattern)
(defn the-quest [strs to-remove]
(let[my-pattern (->> to-remove
(map #(Pattern/quote %))
(clojure.string/join "|")
re-pattern)]
(map #(clojure.string/replace % my-pattern "") strs)))
这里我只创建一个匹配任何to-remove
字符串的正则表达式,并在正则表达式的实例上执行一个replace
。如果您希望能够在to-removed中使用正则表达式控制字符,则必须引入Pattern/quote
。