当前位置: 首页 > 知识库问答 >
问题:

通过调用函数及其键和值创建嵌套clojure映射

郎永福
2023-03-14
{:first 
  {:value1 
    {subvalue1, subvalue2 ..} 
   :value2 
    {subvalue2-1,subvalue2-2}}    
 :second
  {:value3 
    {:subvalue3-1,:subvalue3-2}..}..}

共有1个答案

段干开宇
2023-03-14

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

(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参数应该是一个接受参数集合并返回结果向量的函数。下面是一个样本,它选取了随机响应的随机数:

(defn make-request
  [params]
  (vec (repeatedly (+ 1 (rand-int 3)) #(rand-nth ["r1" "r2" "r3"]))))

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

(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"]}}
(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"]}}}
 类似资料:
  • 我必须使用elasticsearch和python为需要索引的json数据创建索引。例如,我有一个嵌套数组[[39.909971141540645,1452077285.150548,1452077286.196072,1.0455241203308105]]我需要为这个数组定义一个映射,比如第一个字段是count,第二个字段是start_time,end_time,duration。请帮助说明如

  • 问题内容: 我有以下代码: 有什么方法可以在函数外部调用函数?我试过调用,但我认为它仅在父函数内部可见。 问题答案:

  • 问题内容: 在python中使用MySQLdb库时,如何定义多语句函数或过程? 例: 这将创建以下回溯: 如果我将相同的SQL直接复制到mysql shell客户端中,它将按预期工作 问题答案: 该命令是内置的MySQL Shell客户端,只有该程序(和MySQL查询浏览器)才能识别。如果您直接通过API执行SQL语句,则无需使用。 的目的是帮助您避免在语句本身可以包含分号字符时避免终止语句。这在

  • 问题内容: 我有一个方法,我已经分解成一些较小的嵌套函数来分解代码库: 有没有一种方法可以单独运行其中一个嵌套函数。例如: 编辑: 我正在尝试在使用pyramid_breaker构建的Web服务器上设置缓存 这是我的理解可能不准确: 现在我有这个原因是因为装饰器用来创建缓存键的名称空间是从函数和争论中产生的。因此,您不能仅将装饰器放在getThis上,因为请求变量是唯一的,并且缓存是无用的。所以我

  • 我试图提供一种方法,在一个模型中生成一个新对象(列表),在另一个模型中使用has_many关系(通过分组)生成一个新的关联对象(项目)。我能够让表单工作正常,但无法弄清楚为了正确完成创建过程,我缺少什么。 Rails v.5.1.2,Ruby v.2.4.1 lists_controller.rb items_controller.rb list.rb模型 item.rb模型 grouping.r

  • 问题内容: 我有一个以整数为键的地图。使用EL,如何通过其键访问值? 我以为这可以工作,但是不行(请求的属性中已经有map了): 跟进:我找到了问题所在。显然使用数字作为进行地图查找Long。当我更改为并收到错误时,我发现了这一点: 如果我将地图更改为: 然后返回“一个”。那是什么 为什么将数字视为长号。对我来说似乎违反直觉(因为int比long更常用)。 所以我的新问题是,是否有一个EL表示法可