根据另一个哈希映射集合更新哈希映射集合值
Update hash maps collection values based on another hash maps collection
我有以下哈希映射集合:
(def master-data [
{:code "1234" :name "Jhon"}
{:code "5678" :name "Brown"}
{:code "9999" :name "Steven"}
])
我在 csv 文件中有包含以下信息的数据:
old_code,new_code,old_name,new_name
1234,2222,Jhon,Travolta
4321,3456,Steven,Cody
如何将内部主数据的值更改为 csv 文件提供的新数据?
规则是:
- 如果在 csv 文件的
old_code
列中找到 master-data
内的 code
,则使用 csv 文件中的 new_code
值更改 code
值。
- 如果在 csv 文件的
old_name
列中找到 master-data
内的 name
,则使用 csv 文件中的 new_name
值更改 name
值。
您需要映射您的主数据,检查 csv 中的每个项目并在需要时更新主数据条目。
(defn update-if [item key check new-val]
"utility function. updates a value for a key, setting it to new-val if it equals check"
(if (= (item key) check)
(assoc item key new-val)
item))
(defn update-data [data mappings]
(map (fn [item]
(reduce (fn [item [old-code new-code old-name new-name]]
(-> item
(update-if :code old-code new-code)
(update-if :name old-name new-name)))
item
mappings))
data))
回复:
ttask.core> (def master-data [{:code "1234" :name "Jhon"}
{:code "5678" :name "Brown"}
{:code "9999" :name "Steven"}])
#'ttask.core/master-data
ttask.core> (def input "old_code,new_code,old_name,new_name
1234,2222,Jhon,Travolta
4321,3456,Steven,Cody")
#'ttask.core/input
ttask.core> (update-data master-data (rest (csv/read-csv input)))
({:code "2222", :name "Travolta"} {:code "5678", :name "Brown"} {:code "9999", :name "Cody"})
我有以下哈希映射集合:
(def master-data [
{:code "1234" :name "Jhon"}
{:code "5678" :name "Brown"}
{:code "9999" :name "Steven"}
])
我在 csv 文件中有包含以下信息的数据:
old_code,new_code,old_name,new_name
1234,2222,Jhon,Travolta
4321,3456,Steven,Cody
如何将内部主数据的值更改为 csv 文件提供的新数据?
规则是:
- 如果在 csv 文件的
old_code
列中找到master-data
内的code
,则使用 csv 文件中的new_code
值更改code
值。 - 如果在 csv 文件的
old_name
列中找到master-data
内的name
,则使用 csv 文件中的new_name
值更改name
值。
您需要映射您的主数据,检查 csv 中的每个项目并在需要时更新主数据条目。
(defn update-if [item key check new-val]
"utility function. updates a value for a key, setting it to new-val if it equals check"
(if (= (item key) check)
(assoc item key new-val)
item))
(defn update-data [data mappings]
(map (fn [item]
(reduce (fn [item [old-code new-code old-name new-name]]
(-> item
(update-if :code old-code new-code)
(update-if :name old-name new-name)))
item
mappings))
data))
回复:
ttask.core> (def master-data [{:code "1234" :name "Jhon"}
{:code "5678" :name "Brown"}
{:code "9999" :name "Steven"}])
#'ttask.core/master-data
ttask.core> (def input "old_code,new_code,old_name,new_name
1234,2222,Jhon,Travolta
4321,3456,Steven,Cody")
#'ttask.core/input
ttask.core> (update-data master-data (rest (csv/read-csv input)))
({:code "2222", :name "Travolta"} {:code "5678", :name "Brown"} {:code "9999", :name "Cody"})