gpt4 book ai didi

clojure - 在 Clojure 中将向量映射转换为列向量

转载 作者:行者123 更新时间:2023-12-02 09:33:44 24 4
gpt4 key购买 nike

我有一个 map 集合(或列表或序列或向量),如下所示:

{ :name "Bob", :data [32 11 180] }
{ :name "Joe", :data [ 4 8 30] }
{ :name "Sue", :data [10 9 40] }

我想创建新的向量,其中包含与描述数据的键关联的向量“列”中的数据,如下所示:

{ :ages [32 4 10], :shoe-sizes [11 8 9], :weights [180 30 40] }

实际上,一个简单的向量列表可能就足够了,即:

[32 4 10] [11 8 9] [180 30 40]  

如果将原始列表变成向量更好/更容易,那很好;最简单的都行。

最佳答案

给定

(def records
[{:name "Bob" :data [32 11 180]}
{:name "Joe" :data [ 4 8 30]}
{:name "Sue" :data [10 9 40]}])

您可以进行下一步转换以获得所需的结果:

(->> records
(map :data) ; extract :data vectors
; => ([32 11 180] [4 8 30] [10 9 40])
(apply map vector) ; transpose
; => ([32 4 10] [11 8 9] [180 30 40])
(zipmap [:ages :shoe-sizes :weights])) ; make map
; => {:weights [180 30 40], :shoe-sizes [11 8 9], :ages [32 4 10]}

没有注释,它看起来更干净一点:

(->> records 
(map :data)
(apply map vector)
(zipmap [:ages :shoe-sizes :weights]))

没有threading宏它相当于更详细:

(let [extracted (map :data records)
transposed (apply map vector extracted)
result (zipmap [:ages :shoe-sizes :weights] transposed)]
result)

关于clojure - 在 Clojure 中将向量映射转换为列向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29869802/

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