忽略mapconcat中的空字符串?

Jus*_*ell 3 lisp elisp

我正在尝试插入一个逗号分隔的字符串,该字符串是由用户输入的几个值生成的.如果特定值为空,我不想插入该值.我的问题是,mapconcat当函数返回时仍然插入分隔符nil.我也尝试使用unless列表中的控件而不是具有相同结果的函数执行此操作.

(insert (mapconcat 
         (function (lambda (x) (unless (string-equal x "") x))))
         (list input-a input-b input-c)
         ", "))
Run Code Online (Sandbox Code Playgroud)

如果来自用户的值"foo",""以及"bar",输出将是"foo, , bar"; 我希望它是"foo, bar".当输入值为空时,如何防止插入分隔符?

phi*_*ils 6

您的列表包含nil值,并且mapconcat仍将处理这些值,因此您需要先从列表中删除不需要的项目.

具体如何,这取决于您是否需要保留原始形式的列表.这是一个修改原始列表的选项:

(setq my-list (list "foo" "" "bar"))
(mapconcat 'identity
           (remove "" my-list)
           ", ")
Run Code Online (Sandbox Code Playgroud)

如果你不需要原件,你可以用delete而不是remove; 但delete如果你这样做,请务必阅读帮助.