Clojure中使用make-array生成零值二维矩阵的输出问题
解决Clojure中make-array返回Java数组转Clojure序列的问题
你看到的#object["[[I" ...]是Java原生二维int数组的字符串表示,因为make-array创建的是Java原生数组,而非Clojure自带的持久化集合类型。要得到你预期的[[0 0 0] ...]形式,只需把Java数组转换成Clojure的向量结构即可。
方法一:直接创建并转换为Clojure向量
写函数时直接在创建数组后完成转换:
(defn zero-matrix [rows cols] (vec (map vec (make-array Integer/TYPE rows cols))))
调用示例:
(zero-matrix 3 3) ; 返回 [[0 0 0] [0 0 0] [0 0 0]]
方法二:转换已存在的Java数组
如果已经用make-array创建了数组,直接对其做转换:
(def m (make-array Integer/TYPE 3 3)) (vec (map vec m)) ; 将Java数组转为Clojure向量矩阵
补充说明
vec函数会把Java数组转换成Clojure的不可变向量,外层vec处理二维数组的外层结构,内层map vec处理每个一维子数组。- 如果你需要可变的矩阵结构,Java数组本身可以保留(依然能用
get-in/assoc-in操作),但如果要返回符合Clojure集合风格的矩阵,上述转换方式是最直接的方案。
内容的提问来源于stack exchange,提问作者kdv
相关产品推荐
相关产品推荐

