【发布时间】:2016-03-08 19:09:34
【问题描述】:
我有一个对象向量,我想将其转换为对象向量的向量,其中子向量中的每个对象对于特定成员具有相同的值。例如
[{:sku "105"}, {:sku "105"}, {:sku "120"}]
变成
[[{:sku "105"}, {:sku "105"}], [{:sku "120"}]]
我正在尝试掌握函数式的思维方式,但我很确定我还没有到达那里,因为我的代码看起来很笨拙。但这是我目前所拥有的:
(defn separate-by-invoice [original-invoices]
(let [sorted-invoices (sort-by :invoice-number original-invoices)]
(def temp-invoices [])
(reduce (fn [final-invoices invoice]
(let [prev-invoice-number (get-in (last temp-invoices) [:invoice-number])
invoice-number (get-in invoice [:invoice-number])]
(if (= prev-invoice-number invoice-number)
(do
(into temp-invoices invoice))
(do
(into final-invoices temp-invoices)
(def temp-invoices [])
(into temp-invoices invoice))))
final-invoices)
[]
sorted-invoices)))
基本上,我的想法是,我形成一个向量 temp-invoices,并用相同发票编号的所有条目填充它,然后一旦我们得到所有条目,将该向量插入 final-vector ,并返回该值。但相反,最终发票似乎总是一个空向量。我究竟做错了什么?这通常在 clojure 中是如何完成的?
【问题讨论】:
标签: vector clojure functional-programming lisp