在列表中加入字符串的规范方法是什么? [英] What's the canonical way to join strings in a list?
本文介绍了在列表中加入字符串的规范方法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想将( USERID = XYZ USERPWD = 123)
转换为 USERID = XYZ& USERPWD = 123
。我尝试了
(应用#'concatenate'string'( USERID = XYZ USERPWD = 123))
这将返回 USERID = XYZUSERPWD = 123
但是我不知道如何插入'&',下面的函数有效,但是看起来有点复杂。
(defun join(list& optional(delim&)))
(带有输出到字符串的(s)
(当list
(格式为〜A(第一个列表))
(dolist(元素(其余列表))
(格式为〜A〜A的delim元素))))
解决方案
使用 FORMAT 。
〜{
和〜}
表示迭代,〜A
表示美学印刷,而<$ c $
<$ c>〜^ (在文档中也称为Tilde Circumflex)表示仅在出现后才打印。 p $ p>
*(格式为nil〜{〜A〜^,〜}'(1 2 3 4))
1、2、3、4
*
I want to convert ("USERID=XYZ" "USERPWD=123")
to "USERID=XYZ&USERPWD=123"
. I tried
(apply #'concatenate 'string '("USERID=XYZ" "USERPWD=123"))
which will return ""USERID=XYZUSERPWD=123"
.
But i do not know how to insert '&'? The following function works but seems a bit complicated.
(defun join (list &optional (delim "&"))
(with-output-to-string (s)
(when list
(format s "~A" (first list))
(dolist (element (rest list))
(format s "~A~A" delim element)))))
解决方案
Use FORMAT.
~{
and ~}
denote iteration, ~A
denotes aesthetic printing, and ~^
(aka Tilde Circumflex in the docs) denotes printing the , only when something follows it.
* (format nil "~{~A~^, ~}" '( 1 2 3 4 ))
"1, 2, 3, 4"
*
这篇关于在列表中加入字符串的规范方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文