gpt4 book ai didi

list - 在向量的向量中排序列表

转载 作者:行者123 更新时间:2023-12-02 08:34:51 25 4
gpt4 key购买 nike

我有如下数据:

[["i2" "i1"]
['("red" "blue" "green" "yellow") '("C" "D" "A" "B")]]

我正在尝试将其转换为以下格式:

[["i1" "i2"]
['("A" "B" "C" "D") '("blue" "green" "red" "yellow")]]

基本上,我正在尝试:

  1. 按字母顺序对每个列表进行排序
  2. 按字母顺序对第一个内部向量进行排序
  3. 排序并重新排列第二个内部向量,使其与第一个内部向量具有相同的新顺序

事实证明,这对我来说是一项艰巨的任务。我尝试构建类似三层步行的东西,但那没有用。我正在尝试使用各种 map 和步行功能来惯用,但也许我只是使用“Do”并定义自定义排序 map 。这非常具有挑战性。

最佳答案

以下是我如何处理此类问题并提出解决方案。

(defn rearrange [[cols vals]]

首先,我注意到我正在尝试对 ["i2""i1"] 进行排序并类似地重新排列以下列表。所以我将把 cols 和 value 列表放在一起:

    (let [pairs (map list cols vals)]

现在 pairs 是一组数据结构,如下所示:("i2"("red""blue""green""yellow")))。您希望函数返回一个向量。

        (vector

让我们对这些对进行排序,并从每个对中获取第一个项目。

            (mapv first (sort-by first pairs)) 

mapv(vec (map ...)) 相同。 sort-by通过比较 (第一项) 进行排序。

如果我们用 second 替换上面行中的第一个 first 实例,那么我们就会以正确的顺序获得相应的值列表。但是这些列表本身不会被排序。所以我们添加:

            (mapv (comp sort second) (sort-by first pairs)))))

最终结果:

(defn rearrange [[cols vals]]
(let [pairs (map list cols vals)]
(vector
(mapv first (sort-by first pairs))
(mapv (comp sort second) (sort-by first pairs)))))

这不是您可以编写的函数的最佳版本,但达到这一点就成功了一半。如果您了解其工作原理,就可以开始改进它。

(def data [["i3" "i1" "i2"]
['("a" "c" "d" "b")
'("elephant" "zebra" "tiger" "cat")
'("red" "yellow" "blue" "green")]])
user=>(rearrange data)
[["i1" "i2" "i3"]
[("cat" "elephant" "tiger" "zebra")
("blue" "green" "red" "yellow")
("a" "b" "c" "d")]]

关于list - 在向量的向量中排序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22842553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com