如何更改地图的子地图的值?

zhangyangyu

我对Clojure和函数式编程不熟悉,现在遇到了问题。我得到了这样的数据结构:

{
 :service1 \a
 :service2 \b
 :service3 \c
 :default \d
 :alert-a {
           :duration "00:00-23:59"
           :if-alert true
           :continuous-times 2
           :time-interval [2 6 9 15 30 60]
           :times -1
           }
 :alert-b {
           :duration "09:00-23:00"
           :if-alert true
           :continuous-times 2
           :time-interval [2 6 9 15 30 60]
           :times -1
           }
 :alert-c {
           :duration "00:00-23:59"
           :if-alert true
           :continuous-times 5
           :time-interval [5]
           :times 1
           }
 :alert-d {
           :duration "00:00-23:59"
           :if-alert true
           :continuous-times 5
           :time-interval [5 15 30 60]
           :times -1
           }
 }

这是从配置文件中读取的内容。我想使用将所有:duration值更改为DateTime对象clj-time所以我可以得到类似:

{
 :service1 \a
 :service2 \b
 :service3 \c
 :default \d
 :alert-a {
           :duration DateTime Object
           :if-alert true
           :continuous-times 2
           :time-interval [2 6 9 15 30 60]
           :times -1
           }
 :alert-b {
           :duration DateTime Object
           :if-alert true
           :continuous-times 2
           :time-interval [2 6 9 15 30 60]
           :times -1
           }
 :alert-c {
           :duration DateTime Object
           :if-alert true
           :continuous-times 5
           :time-interval [5]
           :times 1
           }
 :alert-d {
           :duration DateTime Object
           :if-alert true
           :continuous-times 5
           :time-interval [5 15 30 60]
           :times -1
           }
 }

但是数据结构是不可变的。在其他语言中,这是一个容易解决的问题,但是现在整个下午我都不知道该怎么办。

那么有人可以给我一些建议吗?我是否使用了错误的数据结构?或者,可以通过功能方式以某种方式解决此问题。

丹尼尔·尼尔

尽管您正在使用不可变的数据结构,但是可以轻松高效地返回基于原始数据的新数据结构。

在这种情况下,最简单(如果重复)的解决方案是:

(-> m 
  (update-in [:alert-a :duration] parse-duration)
  (update-in [:alert-b :duration] parse-duration)
  (update-in [:alert-c :duration] parse-duration)
  (update-in [:alert-d :duration] parse-duration))

在这里要意识到的重要一点是,update-in 不会改变正在处理的数据结构。而是返回应用了修改的新数据结构。

线程宏->允许通过update-in操作对新数据结构进行线程处理,以便最终返回的值是应用了所有更新的原始数据结构。

解析持续时间函数可能看起来像这样:

(defn parse-duration 
   "Convert duration in HH:MM-HH:MM format"
    [s]
    (let [[t1 t2] (clojure.string/split s #"-"))
       (Period. (clj-time.coerce/to-date-time t1) 
                (clj-time.coerce/to-date-time t2))) 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何更改地图的键和值以更改其大小写

来自分类Dev

使用Spectre递归更改地图中的值

来自分类Dev

在 Haskell 中更改地图中多个键的值

来自分类Dev

如何更改地图容器的内部排序方案?

来自分类Dev

使用mapbox js,如何更改地图样式?

来自分类Dev

更改地图数据时如何防止死锁

来自分类Dev

如何在ggplot中更改地图的大小

来自分类Dev

更改地图视图而不更改位置

来自分类Dev

更改地图D3的颜色

来自分类Dev

更改地图颜色的宏(状态)

来自分类Dev

在Cartopy中更改地图边界颜色

来自分类Dev

在ggplot中更改地图颜色

来自分类Dev

更改地图边界Google Maps API

来自分类Dev

更改地图图钉(颜色或图像)

来自分类Dev

用jQuery更改地图地址

来自分类Dev

Clojure在不更改顺序的情况下更改地图的值

来自分类Dev

Terraform-如何修改地图键?

来自分类Dev

在Haskell修改地图

来自分类Dev

如何更改地图的“地方自动完成”搜索的字体系列?

来自分类Dev

Flutter Google Maps:如何在运行后更改地图类型?

来自分类Dev

单击React Leaflet v.3.x中的标记时,如何动态更改地图缩放?

来自分类Dev

以后可以在C ++中更改地图的排序标准吗?

来自分类Dev

我想更改地址以协调显示在Google地图上

来自分类Dev

Openlayers 3:更改地图范围时出现的问题

来自分类Dev

更改地图上Google徽标的颜色

来自分类Dev

在 Android 应用程序中更改地图类型

来自分类Dev

如何在android中同时更改地图上所有标记的颜色?如何只更改某些标记的颜色?

来自分类Dev

在Android中更改地图API密钥时未加载地图

来自分类Dev

地图值如何排序?

Related 相关文章

热门标签

归档