Clojurescript,如何访问索引序列中的地图
Clojurescript, how to access a map within a indexed sequence
(println (get-in @app-state ["my-seq"]))
Returns 以下序列类型为 cljs.core/IndexedSeq
([-Jg95JpA3_N3ejztiBBM {create_date 1421803605375,
website "www.example.com", first_name "one"}]
[-Jg95LjI7YWiWE233eK1 {create_date 1421803613191,
website "www.example.com", first_name "two"}]
[-Jg95MwOBXxOuHyMJDlI {create_date 1421803618124,
website "www.example.com", first_name "three"}])
如何通过uid访问序列中的地图?例如地图属于
-Jg95LjI7YWiWE233eK1
如果需要数据的顺序,有以下几种可能:
数据一次按顺序存储,一次存储为地图。因此,在添加新条目时,请执行以下操作:
(defn add-entry
[uid data]
(swap! app-state update-in ["my-seq"]
#(-> %
(update-in [:sorted] conj data)
(update-in [:by-uid] assoc uid data))))
查找函数为:
(defn sorted-entries
[]
(get-in @app-state ["my-seq" :sorted]))
(defn entry-by-uid
[uid]
(get-in @app-state ["my-seq" :by-uid uid]))
这具有最好的查找性能,但会使用更多内存并使代码稍微复杂一些。
在 seq 中搜索条目:
(defn entry-by-uid
[uid]
(->> (get @app-state "my-seq")
(filter (comp #{uid} first))
(first)))
在最坏的情况下,这必须遍历整个序列才能找到您的条目。
如果顺序无关紧要,我建议首先将数据存储为地图:
(defn add-entry
[uid data]
(swap! app-state assoc-in ["my-seq" uid] data))
(defn entry-by-uid
[uid]
(get-in @app-state ["my-seq" uid]))
(println (get-in @app-state ["my-seq"]))
Returns 以下序列类型为 cljs.core/IndexedSeq
([-Jg95JpA3_N3ejztiBBM {create_date 1421803605375,
website "www.example.com", first_name "one"}]
[-Jg95LjI7YWiWE233eK1 {create_date 1421803613191,
website "www.example.com", first_name "two"}]
[-Jg95MwOBXxOuHyMJDlI {create_date 1421803618124,
website "www.example.com", first_name "three"}])
如何通过uid访问序列中的地图?例如地图属于
-Jg95LjI7YWiWE233eK1
如果需要数据的顺序,有以下几种可能:
数据一次按顺序存储,一次存储为地图。因此,在添加新条目时,请执行以下操作:
(defn add-entry [uid data] (swap! app-state update-in ["my-seq"] #(-> % (update-in [:sorted] conj data) (update-in [:by-uid] assoc uid data))))
查找函数为:
(defn sorted-entries [] (get-in @app-state ["my-seq" :sorted])) (defn entry-by-uid [uid] (get-in @app-state ["my-seq" :by-uid uid]))
这具有最好的查找性能,但会使用更多内存并使代码稍微复杂一些。
在 seq 中搜索条目:
(defn entry-by-uid [uid] (->> (get @app-state "my-seq") (filter (comp #{uid} first)) (first)))
在最坏的情况下,这必须遍历整个序列才能找到您的条目。
如果顺序无关紧要,我建议首先将数据存储为地图:
(defn add-entry
[uid data]
(swap! app-state assoc-in ["my-seq" uid] data))
(defn entry-by-uid
[uid]
(get-in @app-state ["my-seq" uid]))