相关疑难解决方法(0)

在列表中连接字符串的规范方法是什么?

我想转换("USERID=XYZ" "USERPWD=123")"USERID=XYZ&USERPWD=123".我试过了

(apply #'concatenate 'string '("USERID=XYZ" "USERPWD=123"))
Run Code Online (Sandbox Code Playgroud)

将返回""USERID=XYZUSERPWD=123".

但我不知道如何插入'&'?以下功能有效但似乎有点复杂.

(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)))))
Run Code Online (Sandbox Code Playgroud)

common-lisp

23
推荐指数
3
解决办法
5710
查看次数

如何"压缩"或"旋转"可变数量的列表?

如果我有一个包含任意数量列表的列表,如下所示:

var myList = new List<List<string>>()
{
    new List<string>() { "a", "b", "c", "d" },
    new List<string>() { "1", "2", "3", "4" },
    new List<string>() { "w", "x", "y", "z" },
    // ...etc...
};
Run Code Online (Sandbox Code Playgroud)

...有没有办法以某种方式将列表"压缩"或"旋转"成这样的东西?

{ 
    { "a", "1", "w", ... },
    { "b", "2", "x", ... },
    { "c", "3", "y", ... },
    { "d", "4", "z", ... }
}
Run Code Online (Sandbox Code Playgroud)

显而易见的解决方案是做这样的事情:

public static IEnumerable<IEnumerable<T>> Rotate<T>(this IEnumerable<IEnumerable<T>> list)
{
    for (int i = 0; i < list.Min(x => x.Count()); i++) …
Run Code Online (Sandbox Code Playgroud)

c# linq algorithm

13
推荐指数
3
解决办法
1145
查看次数

在common-lisp中更好的pythonic`join`

在Edi Weitz的cl cookbook中,对于pythonic join,建议使用此功能:

(defun join (separator list)
  (with-output-to-string (out)
    (loop for (element . more) on list
          do (princ element out)
          when more
            do (princ separator out))))
Run Code Online (Sandbox Code Playgroud)

然而,不知何故,我在思考,必须有一种方式以join另一种方式表达,也许使用format的能力......

在Seibel的书中,(在章节中format)我们发现将列表中的字符串连接到带有分隔符的单个字符串 ", ":

(defvar l '("a" "b" "c"))

(format nil "~{~A~^, ~}" l)
;; "a, b, c"
Run Code Online (Sandbox Code Playgroud)

这是一个pythonic连接,非常简洁; 该~^指令使得", "只添加到最后一个元素之前,并且在没有元素跟随时添加.

但是,这里,分隔符字符串", "是format指令的一部分.

一个棘手的案例是例如(defvar sep #\Tab).如果sep的表示"#\Tab"可以在此格式指令中作为分隔符放置,从而导致:

(format nil "~{~A~^#\Tab~}" l)
Run Code Online (Sandbox Code Playgroud)

我们会达到目标.

显然,必须使用宏来生成格式指令...我尝试了类似的东西,(princ-to-string sep)但这给了 …

lisp metaprogramming common-lisp

4
推荐指数
1
解决办法
181
查看次数

标签 统计

common-lisp ×2

algorithm ×1

c# ×1

linq ×1

lisp ×1

metaprogramming ×1