2024 年 Clojure 状况调查!中分享您的想法。

欢迎!请参阅关于页面以获取有关如何使用本平台的更多信息。

+11
转换器
重新标记

我经常发现自己在编写一个减少函数,它执行与 group-by 相同的功能。如果 group-by 返回一个减少函数将会很方便(而不需要导入 Christophe Grand 的 xforms 库)。所以我不需要写:

  (->> (range 10)
       (transduce (map inc) (completing (fn [r x] (update r (even? x) (fnil conj []) x))) {}))

我可以写:

  (->> (range 10)
       (transduce (map inc) (group-by even?)))

可能是这样的?

  (defn group-by
    ([f]
     (fn
       ([] (transient {}))
       ([r] (persistent! r))
       ([r x]
        (let [k (f x)]
          (assoc! r k (conj (get r k []) x))))))
    ([f coll]  
     (persistent!
      (reduce
       (fn [ret x]
         (let [k (f x)]
           (assoc! ret k (conj (get ret k []) x))))
       (transient {}) coll))))

1 个答案

+1
...