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 - Fatal编程技术网

在Clojure中搜索记录的最简单方法

在Clojure中搜索记录的最简单方法,clojure,Clojure,我在Clojure有一张这样的地图: (def stuff #{ {:a "help" :b "goodbye"} {:c "help2" :b "goodbye"} {:a "steve" :b "goodbye"} {:c "hello2" :b "sue"} }) :我想提供一个搜索,以便: (search stuff "help") :将返回: #{ {:a "help" :b "goodbye"}

我在Clojure有一张这样的地图:

(def stuff #{

        {:a "help" :b "goodbye"}
        {:c "help2" :b "goodbye"}
        {:a "steve" :b "goodbye"}
        {:c "hello2" :b "sue"}
    })
:我想提供一个搜索,以便:

(search stuff "help")
:将返回:

 #{
    {:a "help" :b "goodbye"}
    {:c "help2" :b "goodbye"}
}
:最简单的方法是什么?

(filter(comp{“help”}:a)stuff)
:新编写的函数首先对目标调用
:a
,然后对结果调用
{“help”}
:如果
,则返回一个真实值:
属性正好是
“help”


将其转换为一个集合,并将其封装在一个带有您想要调整的参数的函数中,留给读者作为练习。坦率地说,虽然代码非常简单,每次您想进行“搜索”时重写代码可能会更短,可读性更高。

全文搜索是一个不同的主题,但如果您可以使用regexps,我会使用以下内容:

(defn match [re e]
    (re-find re (:a e))

(defn search [re m]
    (into #{} (filter (partial match re) m)))

这就成功了。

谢谢。我正在寻找可以搜索多个键的东西,虽然我也这么做了,并查看了所有的阅读器宏,但我找不到任何可以将其转换为一组的宏。谢谢你的提示,嗯?函数
set
执行此操作。你为什么要寻找一个阅读器宏?对不起,也许我误解了,正如你在回答中提到的使用阅读器。“阅读器”就是你:你目前正在阅读这个答案。“给读者留点东西做练习”是一个你可能错过的英语成语。它经常出现在教科书中,意思是:“X可以完成,但这会占用书中的很多空间,而且你可能会喜欢自己做。”这也常常是一个笑话:“X可以完成,但我太懒了,所以自己做吧。”我无法让它工作。当我这样做(搜索“帮助”)时,它会返回所有四条记录。谢谢你的努力,太棒了!你是个明星。这是第一次奏效。(顺便说一句,我也很感激你在发帖前测试了你的答案):)我发现的唯一问题是,当一条记录包含一个包含nil值的值时,就会出现一个空指针异常。不按预期工作:还会返回“records”,其中有“help”一词也作为:b的值出现。@Laurent-为了保护Rayne,我希望它返回记录,而“help”一词的值是:b@Laurent这就是他想要的。去写一些逆时针的东西,别管我;P
user=> (defn search [s q] (select #(some (partial re-find (re-pattern q)) (vals %)) s))
#'user/search
user=> (search stuff "help")
#{{:a "help", :b "goodbye"} {:c "help2", :b "goodbye"}}