2017-02-10 10 views
3

nth関数の一般化を探しています。 ありジュリアでの素敵な機能があると私はClojureので同等見つけるのトラブルを抱えている:INDSで指定されたインデックスの集合に基づいて配列値を取得する

getindex(A、INDSは...)、配列Aのサブセットを返し、 どこ各IND Int、Range、Vectorのいずれかです。

これは、この質問に関連している: Clojure Remove item from Vector at a Specified Location

+0

'Julia'の' getindex'の記述は、[言語ウェブサイトのもの](http://docs.julialang.org/ja/stable/stdlib/collections/?highlight=getindex)には対応していません。 #Base.getindex)。 – Thumbnail

+0

@Thumbnail以前のバージョンからコピーしました。それは同じように動作します。 – m33lky

答えて

9

mapすでにお望みのことをします。 (map v indices)は、ベクトルをそのインデックスの関数として扱うことができるため、意図した通りに機能します。

+0

ベクトルだけでなくマップ用のTrueもあります。 – Thumbnail

2

これはあなたが必要なものをやるん:

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

あなたもselect-keysを使用することができます。場合によっては非常に役立つことがあります:

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

私はこれが有用であることを理解します。他の言語と同じように、Clojureでは型安定性も重要ではないことは驚きです。 – m33lky

関連する問題