gpt4 book ai didi

filter - 单次迭代中的多个过滤器

转载 作者:行者123 更新时间:2023-12-01 12:22:51 25 4
gpt4 key购买 nike

假设我有一个像这样的元组列表:

[["type_2" "val_x"] ["type_1" "val_y"] ["type_1" "val_z"]]

我想过滤它们,这样我就有两个独立的集合,如下所示:

[["type_2" "val_x"]] 

[["type_1" "val_y"] ["type_1" "val_z"]]

我可以运行过滤器两次。我想知道是否有可能通过函数式编程在单次迭代中获得相同的结果?

这是想要的界面:

(multiple-filter predicate_fn_1 predicate_fn_2 coll)

最佳答案

虽然 (vals (group-by first... 在您的情况下可以正常工作,但它不是通用的。这是应用多个过滤器的变体(许多可能的变体之一):

(defn classify [items & preds]
(loop [[x & xs :as items] items
res (repeat (count preds) [])]
(if (empty? items)
res
(recur xs
(mapv #(if (% x) (conj %2 x) %2) preds res)))))

回复:

user> (classify [[:a 10] [:a 20] [:b 30] [:d 2] [:c 40] [:d 1]]
#(= (first %) :a)
#(= (first %) :b)
#(= (first %) :d))
[[[:a 10] [:a 20]] [[:b 30]] [[:d 2] [:d 1]]]

或与 reduce 相同:

(defn classify [items & preds]
(reduce (fn [res x] (mapv #(if (% x) (conj %2 x) %2) preds res))
(repeat (count preds) [])
items))

关于filter - 单次迭代中的多个过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42517532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com