Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Clojure中将地图列表转换为地图_Clojure - Fatal编程技术网

在Clojure中将地图列表转换为地图

在Clojure中将地图列表转换为地图,clojure,Clojure,我是Clojure和编程新手,我想知道如何着手解决这个问题 我已导出以下地图列表 ({:name "Bob", :occupation "Senior salesman", :work-department "Sales"} {:name "Sharon", :occupation "Executive", :work-department "Sales"}

我是Clojure和编程新手,我想知道如何着手解决这个问题

我已导出以下地图列表

({:name "Bob",
  :occupation "Senior salesman",
  :work-department "Sales"}
 {:name "Sharon",
  :occupation "Executive",
  :work-department "Sales"}
 {:name "Donald",
  :occupation "Customer Support agent",
  :work-department "Client services"}
 {:name "Catherine",
  :occupation "Technical Lead", 
  :work-department "Engineering"})
我将如何将此从地图列表转换为以下样式的地图

{:sales
 {:name "Bob"
  :occupation "Senior salesman"}
 :sales
 {:name "Sharon"
  :occupation "Executive"}
 :client-services
 {:name "Donald"
  :occupation "Customer Support agent"}
 :engineering
 {:name "Catherine"
  :occupation "Technical Lead"}}

感谢您的帮助

您可能会发现功能分组在这种情况下很有用。假设我们将您的地图列表定义为“以前”

然后,group by将生成从键到具有该键的项目列表的映射:

> (group-by :work-department before)

{"Sales"
 [{:name "Bob",
   :occupation "Senior salesman",
   :work-department "Sales"}
  {:name "Sharon",
   :occupation "Executive",
   :work-department "Sales"}],
 "Client services"
 [{:name "Donald",
   :occupation "Customer Support agent",
   :work-department "Client services"}],
 "Engineering"
 [{:name "Catherine",
   :occupation "Technical Lead",
   :work-department "Engineering"}]}
如果您希望有一个平面结构输出,您可以这样变换每个条目:

> (map (fn [e] [(:work-department e) (dissoc e :work-department)]) before)

(["Sales" {:name "Bob", :occupation "Senior salesman"}]
 ["Sales" {:name "Sharon", :occupation "Executive"}]
 ["Client services"
  {:name "Donald", :occupation "Customer Support agent"}]
 ["Engineering" {:name "Catherine", :occupation "Technical Lead"}])

请添加您尝试过的代码以及失败的原因(例如错误、堆栈跟踪、日志等),以便我们对其进行改进。现在,您想要的结果显示一个包含奇数个元素的映射,这是不可能的。如果要将其中两个键/VAL分解为它们自己的映射,则该映射本身也需要一个键。例如,
{:工作部门“xxx”:员工{:姓名“xxx”:职业“xxx”}
请更新您的问题,以显示示例输入所需的完整准确输出(编号xxx:-),感谢您的友好回复。我已经用要求的信息修改了我的问题,现在地图上有两次
:sales
。如果您希望得到帮助,请花时间关注问题,并首先尝试您的代码示例,这样它们就不会包含明显的错误谢谢您的反馈。我将努力提高我的问题和质量。请注意两次:销售-是否有办法满足数据包含相同值的情况?谢谢Markc!这太好了,我真的很感谢你在这件事上的帮助
> (map (fn [e] [(:work-department e) (dissoc e :work-department)]) before)

(["Sales" {:name "Bob", :occupation "Senior salesman"}]
 ["Sales" {:name "Sharon", :occupation "Executive"}]
 ["Client services"
  {:name "Donald", :occupation "Customer Support agent"}]
 ["Engineering" {:name "Catherine", :occupation "Technical Lead"}])