收集到向量而不是列表

omrisim210

我使用SBCL和quicklisp的iterate软件包解决了Euler项目的第八个问题在我的代码中,我定义了一个函数,可以将数字转换为数字列表。这是源代码:

(defun number-to-list (n)
  (iter (for c in-string (write-to-string n)) (collect (digit-char-p c))))

collect这两个条款iter,并loop做一个清单出来的值。是否可以代替生成矢量(一维数组)?

我唯一的选择是将生成的列表转换number-to-list为向量吗?因为这似乎效率低下(尽管可能不是那么低效)

雷纳·乔斯维格

通常存在一个大问题:结果向量将有多大?最好事先知道,然后我们可以用正确的大小分配一次向量。否则,我们将找到解决该问题的方法:使用可调整大小的向量,先分配一个列表,然后再复制到结果向量中,再使用填充指针分配更大的向量,...

如果有序列,则可以使用Common Lisp函数MAP:如果源对象是向量(此处为字符串),则获取长度很便宜。

CL-USER 1 > (map 'vector
                 #'digit-char-p
                 (write-to-string 5837457324534))
#(5 8 3 7 4 5 7 3 2 4 5 3 4)

您可以使用ITERATE和收集向量:

FOO 32 > (defun number-to-vector (n)
           (iter (for c in-string (write-to-string n))
             (collect (digit-char-p c) result-type vector)))
NUMBER-TO-VECTOR

FOO 33 > (number-to-vector 8573475934)
#(8 5 7 3 4 7 5 9 3 4)

如果看宏扩展,它实际上会收集到一个列表中,然后调用COERCE以创建向量。因此:没有效率的胜利。

请注意,这是另一个ITERATE其中更强大的示例LOOP:标准LOOP不能直接从collect返回向量

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将HashMap的值收集到向量中?

外循环流,但收集到内循环对象列表

使用流从地图和值,并收集到列表

Java的8过滤+收集到列表中的NullPointerException

Java流将对象列表收集到存储桶

递归搜索记录属性并收集到Haskell的列表中

如何将流收集到列表?

pyspark - 将收集到的列表转换为元组

收集到 Vec 与 &Vec

Laravel收集到数组

收集到可迭代

为什么在使用“ flat_map”时需要收集到向量中?

如何将Futures 0.1迭代器收集到向量中?

将线程迭代器收集到向量中启动线程

如何将向量值函数的输出收集到数据框中?

如何将多变量向量值函数的输出收集到数据框中?

如何使用Java流将多个列表收集到一个列表中?

Java Stream:如何遍历列表映射并将数据收集到列表

如何将 int 列表收集到 Java 8 中的条目列表

Java 8的可选列表收集到列表编译错误

如何访问彼此嵌套的多层词典和列表,并将它们收集到列表中

Java的收集到列表中,但指定的两个元素顺序预先定义

如何将Iterator值收集到50个元素的列表中

将 JSON 文件中的所有元素收集到一个列表中

将对象列表中的值收集到swift5中的字典中

如何在Python中将元组列表收集到一个元组中?

将可迭代对象收集到一个变量中(列表)

将Observables收集到列表中似乎不会立即发出该集合

将可观察的分组排放物收集到一个列表中