【问题标题】:Clojure map nestingClojure 地图嵌套
【发布时间】:2014-01-16 11:15:02
【问题描述】:

我有一个这样的向量结构...

[{:email "email@gmail.com", :password "pass"} 
 {:email "email2@yahoo.com", :password "pass2"} 
 {:email "email3@yahoo.com", :password "pass3"} 
 {:email "email4@gmail.com", :password "pass4"}]

我怎样才能制作一个看起来像这样的地图?两个电子邮件值必须相同...

 {{"email@gmail.com"{:email "email@gmail.com", :password "pass"}}, 
  {"email2@yahoo.com"{:email "email2@yahoo.com", :password "pass2"}}, 
  {"email3@yahoo.com" {:email "email3@yahoo.com", :password "pass3"}} ,
  {"email4@gmail.com"{:email "email4@gmail.com", :password "pass4"}}     

我对 clojure 有点陌生,因此非常感谢任何帮助。

【问题讨论】:

    标签: clojure


    【解决方案1】:
    (def a [{:email "email@gmail.com", :password "pass"}
            {:email "email2@yahoo.com", :password "pass2"}
            {:email "email3@yahoo.com", :password "pass3"}
            {:email "email4@gmail.com", :password "pass4"}])
    
    (zipmap (map :email a) a)
    

    创建一系列电子邮件地址,然后将其和原始映射的向量压缩到一个新映射中,其中地址作为键,原始映射作为值。

    (想想左侧垂直显示的电子邮件列表和右侧垂直显示的原始地图条目,以及向下移动的拉链将它们连接在一起)

    【讨论】:

    • 如何向 :password 关键字中的所有值添加函数?我正在尝试合并 (creds/hash-bcrypt "string/value of password") 函数。
    • 如果您询问如何转换与 :password 关联的值,那么如果密钥已经存在,则 assoc 将“覆盖”。例如(zipmap (map :email a) (map #(assoc % :password (keyword (:password %))) a)) 将字符串转换为关键字
    • 不,我想对 :password 关键字中的所有值实现我的功能。
    • 不知道你在做什么。也许用一些你想要的输出示例作为另一个问题问?
    • 我已经这样做了,我已经回答了这个问题......现在我没有问题了。:D再次感谢您的帮助。
    【解决方案2】:

    另一种选择(尽管您的输出将嵌套在向量中)是使用group-by:

    user=> (def a [{:email "email@gmail.com", :password "pass"}
            {:email "email2@yahoo.com", :password "pass2"}
            {:email "email3@yahoo.com", :password "pass3"}
            {:email "email4@gmail.com", :password "pass4"}])
    #'user/a
    user=> (group-by :email a)
    {"email@gmail.com" [{:email "email@gmail.com", :password "pass"}], "email2@yahoo.com" [{:email "email2@yahoo.com", :password "pass2"}], "email3@yahoo.com" [{:email "email3@yahoo.com", :password "pass3"}], "email4@gmail.com" [{:email "email4@gmail.com", :password "pass4"}]}
    user=> 
    

    【讨论】:

    • 简洁的解决方案,但我需要它是地图...status203 回答了我的问题,但还是谢谢你。
    • 虽然(map (fn [[k [v]]] {k v}) (group-by :email a))确实很容易修复
    猜你喜欢
    • 2016-11-14
    • 1970-01-01
    • 2012-07-19
    • 2015-01-28
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多