2013-05-06 1 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 "б" 1" c "2} (map str" acba "))' достаточно в последнем примере - вам просто нужна последовательность строк, а не символов. – ToBeReplaced

+2

Просто для удовольствия: если вы работали с ключевыми словами: '((применить juxt [: a: c: b: a]) {: a 0: b 1: c 2})' – Kyle

+0

@ToBeReplaced Согласовано - мне это пришло в голову также. Я просто отработал этот вопрос. – noahlz