【发布时间】:2014-08-27 17:48:43
【问题描述】:
我正在学习如何在 Clojure 中惯用地破坏数据结构,目前有以下示例数据
数据:
(def data [
{:category "A", :vertical_name "One", :vertical_id 11}
{:category "B", :vertical_name "Two", :vertical_id 12}
{:category "A", :vertical_name "Three", :vertical_id 13}
{:category "C", :vertical_name "Four", :vertical_id 14}
])
我想将两个/多个地图合并为一个地图,这些地图属于上述数据中的同一类别,
预期输出:
{{:category "A", :vertical [{:vertical_id 11, :vertical_name "One"}{:vertical_id 13, :vertical_name "Three"}]}
{:category "B", :vertical {:vertical_id 12, :vertical_name "Two"}}
{:category "C", :vertical {:vertical_id 14, :vertical_name "Four"}}}
我已经尝试过 group-by 这给了我
{"A" [{:category "A", :vertical_name "One", :vertical_id 11} {:category "A", :vertical_name "Three", :vertical_id 13}],
"B" [{:category "B", :vertical_name "Two", :vertical_id 12}],
"C" [{:category "C", :vertical_name "Four", :vertical_id 14}]}
但这有很多冗余信息,例如:category "A" 存在于所有地图中,并且输出的格式不是我想要的。
提前感谢您的帮助。
【问题讨论】:
-
您的预期输出不是有效的地图(它有奇数个元素)也许您的意思是它是一个向量?
-
@noisesmith - 感谢您指出这一点。我修正了引号。我希望它是地图的地图。
-
你所拥有的是从一个映射到另一个映射的映射——它是无效的,因为映射需要与值一样多的键。一个键是一个结果,值是下一个结果的映射,似乎很荒谬。也许你想要一套?
-
@noisesmith - 是的!我想我可以使用一组。
标签: clojure destructuring