【发布时间】:2013-08-13 07:04:08
【问题描述】:
我正在解析一个 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 %)} 为默认测试重新创建地图条目似乎更加尴尬。
【问题讨论】: