[英]Clojure get nested map value
所以我習慣在我的應用程序中使用嵌套數組或設置圖。 我嘗試在Clojure中設置一個像這樣:
(def gridSettings
{:width 50
:height 50
:ground {:variations 25}
:water {:variations 25}
})
我想知道你是否知道檢索嵌套值的好方法? 我試着寫作
(:variations (:ground gridSettings))
哪個有效,但它是后綴並且相當繁瑣,特別是如果我添加幾個級別。
這就是get-in
作用:
(get-in gridSettings [:ground :variations])
從文檔字符串:
clojure.core/get-in ([m ks] [m ks not-found]) Returns the value in a nested associative structure, where ks is a sequence of keys. Returns nil if the key is not present, or the not-found value if supplied.
您可以使用線程優先宏 :
(-> gridSettings :ground :variations)
除了兩個特殊情況之外,我更喜歡->
over get-in
over
除了提到的其他答案( get-in
和->
macro)之外,有時你想從地圖中獲取多個值(嵌套或不嵌套),在這些情況下,解構可能真的很有幫助
(let [{{gv :variations} :ground
{wv :variations} :water} gridSettings]
[gv wv])
地圖是部分功能(不是全部)。 因此,人們可以簡單地將它們作為函數應用。 根據問題的地圖:
(gridSettings :ground)
;=> {:variations 25}
結果是一張地圖。 因此,它可以再次應用,從而產生與問題中提出的非常相似(但不是向后)的“語法”:
((gridSettings :ground) :variations)
;=>25
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.