我正试图在Clojure中创建一个人口稀少的多维向量,但我正在反对我的知识极限.
我有一个集合x,我遍历,我想创建一个大小的多维向量(count x)的(count x).大多数单元格都是空的,但在x和y轴匹配的每个点(例如,(1 1),(2 2),(3 3)等),我需要运行一个函数来查看是否应该在该空间中放置一个值.
在程序语言中,它将是这样的:
for (i = 0; i < length(x); i++) {
for (j = 0; j < length(x); j++) {
if (i == j && testReturnsTrue(x[i])) {
table[i][j] = (list x[i])
}
else {
table[i][j] = ()
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我无法理解如何在Clojure中完成这项工作.我尝试使用嵌套的for comprehensions和嵌套的循环重复结构,但我无法工作.
或者,我可以创建一个具有正确大小的可变表,将其全部初始化为空列表,然后在检查每个元素时设置值x,但是我希望尽可能保持表不可变.
ama*_*loy 11
使用hashmap?不需要矢量,它不能稀疏.此外,这个必要的解决方案看起来也不稀疏 - 浪费内存储存数以万计的空单元格.也许是这样的:
(let [indexed (map-indexed vector xs)]
(reduce (fn [m [i x]]
(if (test? x)
(assoc-in m [i i] x)
m))
{}
indexed))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
800 次 |
| 最近记录: |