2013-05-06 84 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