gpt4 book ai didi

clojure - 如何根据索引过滤序列中的元素

转载 作者:行者123 更新时间:2023-12-02 07:19:50 24 4
gpt4 key购买 nike

我有一个序列s以及该序列indexes的索引列表。如何仅保留通过索引给出的项目?

简单的例子:

(filter-by-index '(a b c d e f g) '(0 2 3 4)) ; => (a c d e)

我的用例:

(filter-by-index '(c c# d d# e f f# g g# a a# b) '(0 2 4 5 7 9 11)) ; => (c d e f g a b)

最佳答案

您可以使用keep-indexed :

(defn filter-by-index [coll idxs]
(keep-indexed #(when ((set idxs) %1) %2)
coll))

使用显式递归和惰性序列的另一个版本:

(defn filter-by-index [coll idxs]
(lazy-seq
(when-let [idx (first idxs)]
(if (zero? idx)
(cons (first coll)
(filter-by-index (rest coll) (rest (map dec idxs))))
(filter-by-index (drop idx coll)
(map #(- % idx) idxs))))))

关于clojure - 如何根据索引过滤序列中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7744656/

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