【问题标题】:How to redistribute content of a 2-d array? [duplicate]如何重新分配二维数组的内容? [复制]
【发布时间】:2019-06-26 17:05:05
【问题描述】:

有什么快速转换的方法

[["a" "b"] 
 ["c" "d"] 
 ["e" "f"]] 

[["a" "c" "e"] 
 ["b" "d" "f"]]

【问题讨论】:

  • 顺便说一句,你试过什么?

标签: arrays clojure


【解决方案1】:
(use '[clojure.core.matrix])

(let [a [["a" "b"]
         ["c" "d"]
         ["e" "f"]]]
    (transpose a))

【讨论】:

    【解决方案2】:

    这是一种使用可变参数map(或mapv)和apply的方法:

    (apply mapv vector [["a" "b"]
                        ["c" "d"]
                        ["e" "f"]])
    => [["a" "c" "e"] ["b" "d" "f"]]
    

    【讨论】:

      【解决方案3】:
      (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 函数)。

      【讨论】:

        【解决方案4】:

        我不认为有一种“快速”的方式,因为数组有一个固定的长度,在初始化时分配给一些内存。必须从当前数组中提取数据,然后必须初始化不同大小的数组并用提取的数据填充。许多编程语言中有各种“(取消)打包”功能,但是当您需要灵活的容器时,您可能需要考虑使用列表:添加或删除链表中的元素可以在 O(1) 时间内完成。

        【讨论】:

          猜你喜欢
          • 2012-09-04
          • 1970-01-01
          • 2011-10-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多