我正在解析一个 CSV 文件,因为 CSV 没有类型信息,所以所有值(浮点数、整数、日期等)都变成了字符串。为了修复这些类型,我创建了一个定义每个字段类型的映射。现在我需要将字段转换为正确的类型。
给定一个映射,其中值是包含整数和浮点数以及可能的其他类型的字符串,我需要返回一个映射,通过引用类型定义映射将这些值转换为正确的类型。下面是我提出的代码示例,但我觉得必须有更好的方法来做到这一点。
(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 %)}
似乎更加尴尬。