获取基于索引集合的数组值



我正在寻找nth函数的推广。Julia 中有一个不错的函数,我在 Clojure 中找不到等效函数:

getindex(A, inds...(返回由 inds 指定的数组 A 的子集, 其中每个 ind 可以是 Int、Range 或 Vector。

这与这个问题有关:Clojure 从矢量中指定位置删除项目

map已经做了你想要的。 (map v indices)按预期工作,因为可以将向量视为其索引的函数。

这能满足你的需要吗:

(defn get-nths [xs ns]
  (for [n ns]
    (nth xs n)))

向量、范围和仅一个向量的示例:

(defn x []
  (vector
    (get-nths [:a :b :c :d :e] [2 4])
    (get-nths [:a :b :c :d :e] (range 3))
    (get-nths [:a :b :c :d :e] [0])))
(x)
;; => [(:c :e) (:a :b :c) (:a)]

对于向量,您也可以使用 select-keys . 在某些情况下,它可能非常有帮助:

user> (select-keys [:a :b :c :d] [0 1])
{0 :a, 1 :b}

最新更新