忽略mapconcat中的空字符串?

时间:2014-10-15 01:17:05

标签: lisp elisp

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

(insert (mapconcat 
         (function (lambda (x) (unless (string-equal x "") x))))
         (list input-a input-b input-c)
         ", "))

如果用户的值为"foo""""bar",则输出为"foo, , bar";我希望它是"foo, bar"。当输入值为空时,如何防止插入分隔符?

1 个答案:

答案 0 :(得分:6)

您的列表包含nil个值,mapconcat仍会处理这些值,因此您需要先从列表中删除不需要的项目。

具体如何操作取决于您是否需要保留原始形式的列表。这是不会修改原始列表的选项:

(setq my-list (list "foo" "" "bar"))
(mapconcat 'identity
           (remove "" my-list)
           ", ")

如果您不需要原作,则可以使用delete代替remove;但如果你这样做,请务必阅读delete的帮助。