2011-08-25 16 views
12

Ben bir harita, örneğin,dönüş dizisi

(def mymap { :b 1 :a 2 :d 3 :e 4 :f 5}) 

Ben tüm değerleri bir dizi almak için vals kullanabilirsiniz varsa

(vals mymap) 
;=> (1 2 3 4 5) 

nasıl Ben mesela almak için, kendi özel sipariş değerlerin dizisini alabilirim

;=> (4 2 3 1 5) 

neyi sonunda yapmak istediğiniz değerleri seri olduğunu bir dizeye, bu

(defn serialize [m sep] (apply str (concat (interpose sep (vals m)) ["\n"]))) 

böyle bir şey yaptığını (bu örnek işlevi "dizesine bir giriş-harita serialize" görevinden alındı)

ama vals sırasını belirtmek gerekir. durumda

cevap

23

Haritalar kendi tuşlarının işlevleri, bu yüzden bunu yapabilirsiniz:

(map mymap [:e :a :d :b :f]) 
=> (4 2 3 1 5) 
+1

Bu harika! –

0

anahtarların bağlı haritayı sıralayabilir, sonra değerleri almak istiyorum, Brian sort-by

kullanarak bunu yapmak için nasıl bir örnek vardır Yoksa sadece kendi sort comparator

0

Sıralama yapmak istemiyorum (sıralama ipuçları için teşekkürler olsa da), yalnızca değerleri haritadan çektiğimde sırasını belirtmek istiyorum. Bunu yapmanın bir yolunu buldum - haritayı yok et.

(let [{:keys [a b d e f]} mymap] 
    (println e a d b f))