【发布时间】:2019-06-26 17:05:05
【问题描述】:
有什么快速转换的方法
[["a" "b"]
["c" "d"]
["e" "f"]]
到
[["a" "c" "e"]
["b" "d" "f"]]
【问题讨论】:
-
顺便说一句,你试过什么?
有什么快速转换的方法
[["a" "b"]
["c" "d"]
["e" "f"]]
到
[["a" "c" "e"]
["b" "d" "f"]]
【问题讨论】:
(use '[clojure.core.matrix])
(let [a [["a" "b"]
["c" "d"]
["e" "f"]]]
(transpose a))
【讨论】:
这是一种使用可变参数map(或mapv)和apply的方法:
(apply mapv vector [["a" "b"]
["c" "d"]
["e" "f"]])
=> [["a" "c" "e"] ["b" "d" "f"]]
【讨论】:
(def x [["a" "b"]
["c" "d"]
["e" "f"]] )
(def y [ (mapv first x)
(mapv second x) ] ) ; or just `map`
(println y)
=> [[a c e] [b d f]]
如果您想要对二维“数组”(向量的向量)进行一般操作,请参阅 tupelo.arrays(例如 transpose 函数)。
【讨论】:
我不认为有一种“快速”的方式,因为数组有一个固定的长度,在初始化时分配给一些内存。必须从当前数组中提取数据,然后必须初始化不同大小的数组并用提取的数据填充。许多编程语言中有各种“(取消)打包”功能,但是当您需要灵活的容器时,您可能需要考虑使用列表:添加或删除链表中的元素可以在 O(1) 时间内完成。
【讨论】: