/home/matstani/weblog

programming log.

[Clojure] forでネストしたマップを扱う

Clojureで以下のようなネストしたデータ構造を扱いたい場合があります。

1
2
3
4
5
{:division1
 {:group1 [:staff1 :staff2]
  :group2 [:staff3 :staff4 :staff5]}
 :division2
 {:group3 [:staff6 :staff7]}}

ここからstaff要素を参照したい場合、手続き型言語ではforeach文を重ねるのが一般的だと思いますが、Clojureでmap関数やreduce関数をネストすると非常に読みづらくなってしまいます。
Clojureで構造や深さがあらかじめわかっているデータ構造を扱う場合は、forマクロが便利です。 以下のコードでネストしたキーと値の組み合わせが取り出せます。
nested.clj

reduceと組み合わせると値の更新ができます。
nested.clj

その他の便利な関数

特定の位置の値を扱う 

深さがわからないデータ構造を扱う

Comments