32

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

Common Lisp 似乎有这样的功能,但在 Emacs Lisp 中同名的功能format,是一个完全不同的功能。

4

4 回答 4

48

我认为您正在寻找mapconcat

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

于 2012-10-21T16:37:17.593 回答
41

自 24.4 以来, Emacs 已string-join成为subr-x.el

(eval-when-compile (require 'subr-x))
(string-join '("one" "two" "three") ", ") ; ==> "one, two, three"

subr-x.el还包含其他有用的(字符串操作)函数 - 来自 24.4 发行说明:

New library subr-x.el for misc helper functions

hash-table-keys
hash-table-values
string-blank-p
string-empty-p
string-join
string-reverse
string-trim-left
string-trim-right
string-trim
string-remove-prefix
string-remove-suffix
于 2016-11-16T13:29:08.237 回答
12

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

(s-join "+" '("abc" "def" "ghi")) ;; => "abc+def+ghi"
(s-join "\n" '("abc" "def" "ghi")) ;; => "abc\ndef\nghi"
于 2014-04-22T10:50:47.273 回答
8

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

(combine-and-quote-strings '("foo" "bar" "baz") ", ")
"foo, bar, baz"
于 2016-03-30T18:00:28.370 回答