Clojure中多层嵌套Map的解构方法咨询
解构Clojure深层嵌套Map
你已经掌握了二级嵌套Map的解构,处理更深层级的嵌套逻辑完全一致——只需在需要进一步解构的Map值位置,继续嵌套使用解构语法即可。针对你给出的my-nested-map-3,下面是两种易懂的解构示例:
基础写法(显式指定键与变量)
这种写法和你熟悉的二级解构逻辑连贯,每一层嵌套都延续相同格式:
(def my-nested-map-3 {:id 1 :name {:first "ali" :last "veli"} :surname {:snf "foo" :snl "bar" :location {:country "usa"}} :age 26}) (let [{id :id ; 解构二级的:name Map {first :first last :last} :name ; 解构二级的:surname Map,同时嵌套解构其内部的三级:location Map {snf :snf snl :snl {country :country} :location} :surname age :age} my-nested-map-3] (println id first last snf snl country age)) ; 输出:1 ali veli foo bar usa 26
简洁写法(使用:keys简化)
如果变量名和Map键名一致,可用:keys关键字减少重复代码,层级结构和原Map完全对应,可读性更强:
(let [{:keys [id age] ; 对:name字段用:keys解构内部键 :name {:keys [first last]} ; 对:surname字段解构,同时嵌套处理:location :surname {:keys [snf snl] :location {:keys [country]}}} my-nested-map-3] (println id first last snf snl country age)) ; 输出同样为:1 ali veli foo bar usa 26
核心逻辑:每遇到一个需要解构的嵌套Map,就用一对{}包裹该Map的解构规则,和外层解构格式完全一致,不管嵌套多少层都可以依此类推。
内容的提问来源于stack exchange,提问作者Barış Can Ateş
相关产品推荐
相关产品推荐

