2019年11月3日日曜日

mapconcat

 csvファイルからデータを取り込むとき、カンマ区切りで文字列をスプリットするけれど。

(split-string "1,2,3" ",")
("1" "2" "3")

 逆がないなぁ。
 そう思って昔、小物ツールをでっちあげた。

(defun list-concate(list &optional separators)
 "listの要素にseparatorsを挿入した文字列を生成する"
 (car (split-string
       (apply 'concat (mapcar (lambda(x)(concat x separators)) list))
       (concat separators "$"))))

(list-concate '("1" "2" "3") ",")
"1,2,3"

 けっこうダサイ。
 最後のseparatorsを削るためにわざわざsplit-stringを使っているとか。

 ふと気づくと、mapconcatというのが、elispのbuilt-in functionに追加されていた。

(mapconcat 'concat '("1" "2" "3") ",")
"1,2,3"