我是函数式编程的新手,目前在《 Getting Clojure》一书的结尾。由于本书中的大多数示例都涉及书籍/图书馆管理,因此我考虑将图书馆管理系统作为一个项目来实施,以帮助我学习和理解概念。我想对保存该库的最佳数据结构提出一些建议-我正在考虑书籍地图的向量或书籍地图的地图。地图很容易查找。向量也可以快速访问。我在想
{:ISBN {:title "Book title" :edition 1 :publisher "ABC publishing"}}
这种方式将在ISBN号上进行查找,但是我也想使用书名进行查找。任何帮助,建议和建议,将不胜感激。
答案 0 :(得分:2)
您可以在index
中使用clojure.set
函数:
(require '[clojure.set :as set])
(def library #{{:title "Book title" :edition 1 :publisher "ABC publishing" :isbn "1234"}
{:title "A title" :edition 2 :publisher "123 publishing" :isbn "4321"}})
(def by-isbn (set/index library [:isbn]))
(by-isbn {:isbn "1234"})
;; => #{{:title "Book title", :edition 1, :publisher "ABC publishing", :isbn "1234"}}
(def by-title (set/index library [:title]))
(by-title {:title "A title"})
;; => #{{:title "A title", :edition 2, :publisher "123 publishing", :isbn "4321"}}