首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将集合转换为映射

将集合转换为映射
EN

Stack Overflow用户
提问于 2014-11-23 14:47:44
回答 2查看 184关注 0票数 0

我想知道在clojure中迭代许多集合创建映射的最佳方法是什么。实际上,我有三个收藏品:

代码语言:javascript
复制
("Aujourd'hui" "Demain" "25.11" "26.11" "27.11" "28.11" "29.11") 
("2 °C" "2 °C" "1 °C" "0 °C" "-3 °C" "-4 °C" "0 °C") 
("8 °C" "6 °C" "4 °C" "2 °C" "1 °C" "1 °C" "5 °C")

我喜欢创建一个地图集合,如下所示:

代码语言:javascript
复制
{:date Aujourd'hui :temp-min 2°C :temp-max 8°C}{...}

我知道这不应该那么困难,但我想不出该怎么做才对。

谢谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-23 15:03:49

我们可以使用map为集合的每个索引构造一个散列映射。当提供两个以上的参数时,map并行地遍历所有集合。

代码语言:javascript
复制
user> (let [dates '("Aujourd'hui" "Demain" "25.11" "26.11" "27.11" "28.11" "29.11") 
            mins '("2 °C" "2 °C" "1 °C" "0 °C" "-3 °C" "-4 °C" "0 °C") 
            maxes '("8 °C" "6 °C" "4 °C" "2 °C" "1 °C" "1 °C" "5 °C")]
        (pprint (map #(hash-map :date %1 :temp-min %2 :temp-max %3) dates mins maxes)))
({:date "Aujourd'hui", :temp-max "8 °C", :temp-min "2 °C"}
 {:date "Demain", :temp-max "6 °C", :temp-min "2 °C"}
 {:date "25.11", :temp-max "4 °C", :temp-min "1 °C"}
 {:date "26.11", :temp-max "2 °C", :temp-min "0 °C"}
 {:date "27.11", :temp-max "1 °C", :temp-min "-3 °C"}
 {:date "28.11", :temp-max "1 °C", :temp-min "-4 °C"}
 {:date "29.11", :temp-max "5 °C", :temp-min "0 °C"})
票数 3
EN

Stack Overflow用户

发布于 2014-11-23 17:20:09

以下函数从列标题titlescolumns序列构造一个表作为记录序列:

代码语言:javascript
复制
(defn build-table [titles columns]
  (apply map (fn [& xs] (zipmap titles xs)) columns))

应该有与:titles一样多的columns

例如,

代码语言:javascript
复制
(build-table [:date :temp-min :temp-max] data)

哪里

代码语言:javascript
复制
(def data ['("Aujourd'hui" "Demain" "25.11" "26.11" "27.11" "28.11" "29.11") 
           '("2 °C" "2 °C" "1 °C" "0 °C" "-3 °C" "-4 °C" "0 °C")
           '("8 °C" "6 °C" "4 °C" "2 °C" "1 °C" "1 °C" "5 °C")])

..。产生

代码语言:javascript
复制
 ({:temp-max "8 °C", :temp-min "2 °C", :date "Aujourd'hui"}
  {:temp-max "6 °C", :temp-min "2 °C", :date "Demain"}
  {:temp-max "4 °C", :temp-min "1 °C", :date "25.11"}
  {:temp-max "2 °C", :temp-min "0 °C", :date "26.11"}
  {:temp-max "1 °C", :temp-min "-3 °C", :date "27.11"}
  {:temp-max "1 °C", :temp-min "-4 °C", :date "28.11"}
  {:temp-max "5 °C", :temp-min "0 °C", :date "29.11"})

这使得所有的数据元素都成为字符串。将它们转换为数字,最好是附加单元,可以独立处理。在编写它们时,例如2°C是无效的Clojure。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27090172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档