我正在尝试找到一种方法来创建具有切换行和列的数组副本。
我想通过设置从影子数组到原始数组的指针来做到这一点,以便 item[2 1] 指向 item[1 2]。
使用指针会产生这样的效果,即当原始数组更改时,阴影数组也将反映该更改。
到目前为止,我想出了对数组中的每个项目使用长度为 1 的置换数组。
它可以工作,但结果是一个带有数组的数组。
我的问题是,有没有更好的方法来做到这一点?
有没有办法通过影子数组使用 setf 来设置原始数组中的值?
到目前为止我的代码:
(defun shadow-column-array (array)
(let* ((colsize (second (array-dimensions array)))
(rowsize (first (array-dimensions array)))
(b (make-array (list colsize rowsize))))
(dotimes (i rowsize b)
(dotimes (j colsize)
(setf (aref b j i)
(make-array 1
:displaced-to array
:displaced-index-offset (+ (* i rowsize) j)))))))
一些输出:
*a* => #2A((0.0 0.1 0.2) (1.0 1.1 1.2) (2.0 2.1 2.2))
(setq b (shadow-column-array (*a*))
*b* => #2A((#(0.0) #(1.0) #(2.0)) (#(0.1) #(1.1) #(2.1)) (#(0.2) #(1.2) #(2.2)))
列的移位数组现在是
col1 => #(#(0.0) #(1.0) #(2.0))
col2 => #(#(0.1) #(1.1) #(2.1))
col3 => #(#(0.2) #(1.2) #(2.2))