Clojure: добавление вектора строк к строке, в результате чего получается вектор

новичок в clojure, так что это, вероятно, будет легко.

У меня есть вектор строк, назовем их names и представим, что он содержит:
["Jake" "Phil" "Bob"]

Я хочу добавить эти строки в конец другой строки с именем intro, которая содержит:
"My name is "

и я хочу поместить результаты в вектор, чтобы он был:

["My name is Jake" "My name is Phil" "My name is Bob"]

Я пробовал несколько комбинаций, используя функцию map, но все они, кажется, разбивают строку intro. Может кто-нибудь мне помочь?


person jakehschwartz    schedule 24.06.2014    source источник


Ответы (1)


Либо не сопоставляйте строку вступления

(mapv #(str "My name is " %) ["Jake" "Phil" "Bob"])
;=> ["My name is Jake" "My name is Phil" "My name is Bob"]

(vec (for [name ["Jake" "Phil" "Bob"]] (str "My name is " name)))
;=> ["My name is Jake" "My name is Phil" "My name is Bob"]

Или повторите вводную строку

(mapv str (repeat "My name is ") ["Jake" "Phil" "Bob"])
;=> ["My name is Jake" "My name is Phil" "My name is Bob"]
person A. Webb    schedule 24.06.2014
comment
Потрясающий. Я не знал о мапве. Три очень понятных способа сделать то же самое. Любое понимание того, какой из них наиболее эффективен? Я бы предположил, что это первый. - person jakehschwartz; 24.06.2014
comment
@JakeSchwartz Вы можете разработать эталонный тест с помощью Criterium, но да, он должен быть первым только с замыканием и отображением. Обычно вам должно быть все равно. - person A. Webb; 24.06.2014