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

Vector 基于索引集合获取数组值,vector,clojure,Vector,Clojure,我正在寻找nth函数的泛化。 Julia中有一个很好的函数,我很难在Clojure中找到一个等价的函数: getindex(A,inds…)返回inds指定的数组A的子集, 其中每个ind可以是Int、Range或Vector 这与这个问题有关: 这是否满足您的需要: (defn get-nths [xs ns] (for [n ns] (nth xs n))) ? 向量、范围和仅一个的示例: (defn x [] (vector (get-nths [:a :b :c

我正在寻找
nth
函数的泛化。 Julia中有一个很好的函数,我很难在Clojure中找到一个等价的函数:

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

这与这个问题有关:

这是否满足您的需要:

(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)]

对于向量,您还可以使用
选择键
。在某些情况下,它可能非常有用:

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

map
已经完成了您想要的操作<代码>(映射v索引)按预期工作,因为可以将向量视为其索引的函数。

我理解这可能很有用。Clojure不像其他语言那样珍视类型稳定性,这让我感到惊讶。您对
Julia
getindex
的描述与此不符。@我从早期版本复制了它。这同样适用于地图——不仅仅是矢量。