首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Clojure中搜索记录的最简单方法

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

Stack Overflow用户
提问于 2011-04-11 22:54:07
回答 3查看 247关注 0票数 3

我在Clojure中有一个类似如下的地图:

代码语言:javascript
运行
复制
(def stuff #{

        {:a "help" :b "goodbye"}
        {:c "help2" :b "goodbye"}
        {:a "steve" :b "goodbye"}
        {:c "hello2" :b "sue"}
    })

:我想提供一个搜索,以便:

代码语言:javascript
运行
复制
(search stuff "help")

:将返回:

代码语言:javascript
运行
复制
 #{
    {:a "help" :b "goodbye"}
    {:c "help2" :b "goodbye"}
}

:最简单的方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-12 00:06:01

代码语言:javascript
运行
复制
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"}}

这就是问题所在。

票数 7
EN

Stack Overflow用户

发布于 2011-04-11 23:59:12

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

代码语言:javascript
运行
复制
(defn match [re e]
    (re-find re (:a e))

(defn search [re m]
    (into #{} (filter (partial match re) m)))
票数 2
EN

Stack Overflow用户

发布于 2011-04-11 23:49:37

(filter (comp #{"help"} :a) stuff):新组合的函数首先在目标上调用:a,然后在结果上调用#{"help"}:如果:a属性恰好为"help",则返回一个真值。

将其转换为一个集合,并将其封装在一个函数中,其中包含您想要调整的参数,这将留给读者作为练习。不过,坦率地说,代码是如此简单,每次您想要进行“搜索”时,重写它可能会更短、更具可读性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5623175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档