是否有将字符串连接到分隔字符串的函数?

N.N*_*.N. 24 elisp

在Emacs Lisp中是否有与之相反的函数,即将split-string列表的元素连接到由给定分隔符分隔的字符串中?换句话说,是否存在给定列表的函数,例如("foo" "bar" "baz"),和分隔符,例如", ",将该列表作为由该分隔符分隔的字符串返回,例如"foo, bar, baz".

Common Lisp似乎有这样的功能,但Emacs Lisp中具有相同名称的函数format是一个完全不同的函数.

Shi*_*iSi 36

我想你正在寻找mapconcat:

mapconcat将函数应用于序列的每个元素:结果(必须是字符串)是连接的.在每对结果字符串之间mapconcat插入字符串分隔符.通常分隔符包含空格或逗号或其他合适的标点符号.

  • [`(mapconcat 'identity'("foo" "bar" "baz") ", ")`](http://www.rhinocerus.net/forum/lang-lisp/576185-emacs-lisps-mapconcat-common -lisp.html#post2300674) (37认同)
  • 这个例子使这个答案更有用. (2认同)
  • emacs 24.5的默认软件包24.5 / lisp / emacs-lisp / subr-x.el具有与@NN提到的名为string-join的功能相同的功能。 (2认同)

小智 21

Emacs 25有string-join:

(string-join '("one" "two" "three") ", ") ; ==> "one, two, three"
Run Code Online (Sandbox Code Playgroud)

  • 那很好!你从哪里得到这个参考?我在文档上找不到。https://www.gnu.org/software/emacs/manual/html_mono/elisp.html (3认同)

Mir*_*lov 8

如果你在Elisp中大量使用字符串操作,我建议你安装一个库s.el,它有一个庞大而一致的字符串API.对于您的任务,它有一个功能s-join:

(s-join "+" '("abc" "def" "ghi")) ;; => "abc+def+ghi"
(s-join "\n" '("abc" "def" "ghi")) ;; => "abc\ndef\nghi"
Run Code Online (Sandbox Code Playgroud)


小智 7

根据您在做什么,可能会有更好的功能,例如,如果您正在构建命令行参数,请使用combine-and-quote-strings它为您完成工作。

(combine-and-quote-strings '("foo" "bar" "baz") ", ")
"foo, bar, baz"
Run Code Online (Sandbox Code Playgroud)