gpt4 book ai didi

xml - 在 clojure 中将 map 的值转换为适当的类型

转载 作者:数据小太阳 更新时间:2023-10-29 02:08:38 24 4
gpt4 key购买 nike

我正在解析一个 CSV 文件,由于 CSV 没有类型信息,所有值( float 、整数、日期等)都变成了字符串。为了修复类型,我创建了一个映射来定义每个字段的类型。现在我需要将字段转换为正确的类型。

给定一个映射,其中值是包含整数和 float 以及可能的其他类型的字符串,我需要返回一个映射,其中通过引用类型定义映射将这些值转换为正确的类型。下面是我提出的代码示例,但我觉得必须有更好的方法来做到这一点。

(mapv #(case ({"one" :int, "point-two" :float} (key %))
:int {(key %) (Integer/parseInt (val %))}
:float {(key %) (Float/parseFloat (val %))}
{(key %) (val %)}) ; If there's no type defined, just return the original
{"one" "1", "point-two" ".2", "three" "three"})

是否需要在每种情况下重新创建映射结果,似乎应该有一种方法可以只修改值,而无需触及 case 内的键。使用 {(key %) (val %)} 为默认测试重新创建 map 条目似乎更加尴尬。

最佳答案

您可以使用reduce-kvupdate-in

(def input {:a "1" :b "2.5" :c "more" :d "string" :e "keys"})

(def typetrans {:a #(Long/parseLong %) :b #(Double/parseDouble %)})

(reduce-kv #(update-in %1 [%2] %3) input typetrans)
; => {:a 1, :c "more", :b 2.5, :d "string", :e "keys"}

它只涉及真正需要更改的键。不是整个 map 。

关于xml - 在 clojure 中将 map 的值转换为适当的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18202661/

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