我有两个数据结构:
(def epics {"ARP-37" 8.0, "ARP-24" 5.0, "ARP-22" 13.0, "ARP-6" 21.0, "ARP-1" 8.0})
(def releases '(["Release one" '("ARP-37" "ARP-22" "ARP-6")]))
; gets the sum of a list of epics (maps epic keys to its corresponding story points)
(defn get-max-sp [epic-list] (reduce + (map #(get epics %) epic-list)))
(def initial-sp (get-max-sp '("ARP-37" "ARP-22" "ARP-6")))有些人可能会认为这是JIRA数据。但是,我想将这两种结构组合成如下所示:
; where (now) is a function from clj-time returning the current date
(def result [{x: (now), y: initial-sp }
{x: (+ now (get epics "ARP-37")), y: (- initial-sp (get epics "ARP-37))}
{x: (+ now (get epics "ARP-37") (get epics "ARP-22")),
y: (- initial-sp (get epics "ARP-37") (get epics "ARP-22"))}
{x: (+ now (get epics "ARP-37") (get epics "ARP-22")
(get epics "ARP-6")),
y: (- initial-sp (get epics "ARP-37") (get epics "ARP-22")
(get epics "ARP-6") )}
])因此,在执行函数之后,我希望结果如下所示:
[{x: 2014-02-18, y: 42}
{x: 2014-02-26, y: 34}
{x: 2014-03-11, y: 21}
{x: 2014-04-01, y: 0}
]我很难组合和映射这两个结构来获得我的结果,我很想得到一些关于如何在clojure中处理这个问题的提示:-)
谢谢你,斯文
更新:,因为它似乎不清楚x和y应该是什么,我将尝试更多地解释它们。X应该是一个初值为今天的日期,在每一个迭代步骤中,史诗的故事点都会被添加到其中,"ARP-37“是史诗,8.0是它的故事点。Y是类似的东西,因为它从史诗列表中的一些故事点开始,然后在每一个迭代步骤中,它的史诗的故事点的数量下降。迭代将超过史诗列表。
发布于 2014-02-18 22:33:37
当我们减少输入时,我使用reductions来获取累积值。
输入来自使用map的史诗列表。
我使用一些简单的类型转换来获得适当的增量和输出类型。
(let [add-days (fn [d days]
(java.util.Date. (long (+ (.getTime d)
(* 1000 60 60 24 days)))))
initial {:x (java.util.Date.)
:y 42}
our-epics ["ARP-37" "ARP-22" "ARP-6"]]
(reductions (fn [tally epic-n]
{:x (add-days (:x tally) epic-n)
:y (long (- (:y tally) epic-n))})
initial
(map #(get epics %)
our-epics)))
({:x #inst "2014-02-18T22:31:17.027-00:00", :y 42}
{:x #inst "2014-02-26T22:31:17.027-00:00", :y 34}
{:x #inst "2014-03-11T22:31:17.027-00:00", :y 21}
{:x #inst "2014-04-01T22:31:17.027-00:00", :y 0})发布于 2014-02-18 21:50:48
我不熟悉JIRA数据,但我不完全清楚您想要的数据结构应该包含什么。X和y应该是什么?
通常,将两个或多个数据结构组合起来并以不同的形式生成单个数据结构的方法是从连续简化的角度来考虑。首先,尝试以任何可能的方式合并这两个结构,在适当的键上关联相关字段(相对于一个或另一个结构,传入一个空映射作为初始值将是一个很好的起点)。一旦你有了一个你不想要的单一数据结构,就把它传递到一个地图上,或者再还原一些更简单的东西。重复,直到你得到你想要的。如果您的最终解决方案太复杂,请确保它已经过测试,并考虑现在重构的工作。
https://stackoverflow.com/questions/21865959
复制相似问题