So here is a vector of maps.
Map contains name, age and school as keys. Note that school is an optional key.
Now I would like to take that vector of maps and return the same name, increment the age and if school key is missing return "-" as its value else return the school itself.
So I write a function which take one map like that. and de-structure its keys.
And now All I have to do is map that function onto that whole vector of maps and we get :
Notice age has been incremented, and if school is empty it is returning a "-" :)
This took me sometime to grasp but somehow I just got it. So thought i'll share it down.
Reference : http://blog.jayfields.com/2010/07/clojure-destructuring.html
Map contains name, age and school as keys. Note that school is an optional key.
> (def student-grades[{:age 21, :name "Mayank", :school "MSB"}{:age 23, :name "Alex"}{:age 11, :name "Amit", :school "Ajmer"}])
Now I would like to take that vector of maps and return the same name, increment the age and if school key is missing return "-" as its value else return the school itself.
So I write a function which take one map like that. and de-structure its keys.
> (defn get-grades
"This will take a map of name age school as keys and return a map of name, incremented age and if school is not given then - else the name of the school itself."
[{:keys [name age school]}]
{:name name
:age (inc age)
:school (or school "-")})
And now All I have to do is map that function onto that whole vector of maps and we get :
> (map get-grades student-grades)
({:name "Mayank", :age 22, :school "MSB"}
{:name "Alex", :age 24, :school "-"}
{:name "Amit", :age 12, :school "Ajmer"})
Notice age has been incremented, and if school is empty it is returning a "-" :)
This took me sometime to grasp but somehow I just got it. So thought i'll share it down.
Reference : http://blog.jayfields.com/2010/07/clojure-destructuring.html