首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过调用带有键和值的函数来创建嵌套的clojure映射

通过调用带有键和值的函数来创建嵌套的clojure映射
EN

Stack Overflow用户
提问于 2017-05-31 20:46:28
回答 1查看 237关注 0票数 0

我遇到了一个问题。所以问题是。

  • 我有一张像{:first {"value1" "value2" "value3"...} :second {"value1" "value2" "value3"...}....}这样的地图。
  • 我有一个函数,它使用参数(first&value1)向服务器发出请求并返回一些信息(它必须使用每个键及其值(first&value1, first&value2 ...second&value1...)进行请求)。
  • 下一步是生成新地图,如下所示: {:首先{:value3 1 {subvalue1,subvalue2 .}:value3 2{subvalue3 2-1,subvalue3 2-2}}:第二,{:value3 3{:subvalue3 3-1,:subvalue3 3-2}.}

子值是使用每个键及其值的每个项发出请求的结果。我想再次重复这个操作(当我向服务器提出请求时使用3个参数),以实现4次嵌套映射:{first {second {third {fourth}}}}。也许有人能给我一些有用的建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-01 03:20:47

这个函数有点长,但是做您需要它做的事情:

代码语言:javascript
复制
(defn rec-update
  [m f]
  (let [g (fn g [m args]
            (into {}
                  (for [[k v] m]
                    (if (instance? java.util.Map v)
                      [k (g v (conj args (name k)))]
                      [k (into {} (map #(let [args (into args [(name k) (name %)])]
                                          [(keyword %) (f args)])
                                       v))]))))]
    (g m [])))

f参数应该是一个函数,它接受一个params集合,并返回一个结果向量。下面是一个随机选择随机响应数的示例:

代码语言:javascript
复制
(defn make-request
  [params]
  (vec (repeatedly (+ 1 (rand-int 3)) #(rand-nth ["r1" "r2" "r3"]))))

虽然下面的示例没有演示,但是给这个函数的params实际上是嵌套的值。

使用:

代码语言:javascript
复制
(def m {:first ["val1" "val2" "val3"], :second ["val4" "val5"]})

(rec-update m make-request)
=>
{:first {:val1 ["r2" "r2" "r3"], :val2 ["r2" "r2"], :val3 ["r1" "r3"]},
 :second {:val4 ["r3" "r3"], :val5 ["r2" "r1"]}}

在结果上再次运行它:

代码语言:javascript
复制
(rec-update *1 make-request)
=>
{:first {:val1 {:r2 ["r1" "r3" "r2"], :r3 ["r3" "r2"]},
         :val2 {:r2 ["r1" "r1"]},
         :val3 {:r1 ["r2"], :r3 ["r1" "r2" "r3"]}},
 :second {:val4 {:r3 ["r3" "r2"]}, :val5 {:r2 ["r1"], :r1 ["r2" "r3"]}}}

如您所见,从请求返回的任何重复值将只在结果映射中表示一次。

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

https://stackoverflow.com/questions/44294383

复制
相关文章

相似问题

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