2013-05-06 85 views
3

我試圖通過一個HashMap音譯列表,像這樣:單字符字符串矢量映射到PersistentMap

(map {"a" 0 "b" 1 "c" 2} ["a","c","b","a"]) 

,我要吐了出來:

[0,2,1,0] 

我該怎麼做?

更正:上述作品,但但這並不:

(map {"a" 0 "b" 1 "c" 2} (vec "acba")) 

請告訴我這裏不同?

回答

4

使用mapv代替

user=> (map {"a" 0 "b" 1 "c" 2} ["a" "c" "b" "a"]) 
(0 2 1 0) 
user=> (mapv {"a" 0 "b" 1 "c" 2} ["a" "c" "b" "a"]) 
[0 2 1 0] 

另外:

user=> (map {"a" 0 "b" 1 "c" 2} (vec "acba")) 
(nil nil nil nil) 
user=> (vec "acba") 
[\a \c \b \a] 
user=> (= \a "a") 
false 

這工作(但是迂迴):

user=> (mapv {"a" 0 "b" 1 "c" 2} (map str (vec "acba"))) 
(0 2 1 0) 
+0

'(mapv { 「」 0 「B」 1「在最後一個例子中,c「2}(map str」acba「))就足夠了 - 你只需要一串字符串,而不是字符。 – ToBeReplaced 2013-05-06 19:46:07

+2

只是爲了好玩:如果你在使用關鍵字:'((apply juxt [:a:c:b:a]){:a 0:b 1:c 2})' – Kyle 2013-05-06 19:48:24

+0

@ToBeReplaced同意 - 這發生在我身上以及。我只是在處理提問者的例子。 – noahlz 2013-05-06 19:48:25