Clojureの内包表記
こんなテーブルから
+--------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+--------------+------+-----+---------+----------------+ | id | bigint(20) | NO | PRI | NULL | auto_increment | | display_name | text | NO | | NULL | | | email | varchar(255) | NO | UNI | NULL | | | user_name | varchar(32) | NO | UNI | NULL | | +--------------+--------------+------+-----+---------+----------------+
idとdisplay_nameだけを取り出した
[[1 "user_name_1"] [2 "user_name_2"] [3 "user_name_3"]]
こんな形のデータを作りたくて(hiccupのdrow-downに渡すデータ)調べたんだけど
なかなかいいサンプルが見つからなかったので結局REPLでガチャガチャやって解決。
; usersにselect * from userの結果が入っている (for [user users] [(:display_name user) (:id user)])
こんな感じでいけた
for - clojure.core | ClojureDocs - Community-Powered Clojure Documentation and Examples
ここのサンプルを見ると、:whenを使うことでフィルタリングする条件とかもつけられるらしい。
これは便利そう。
ちなみに、持ってきたデータの先頭に「選択してください」みたいな
valueが空のデータを追加したい場合はconsを使うと出来た
(cons ["選択してください" ""] (for [user users] [(:display_name user) (:id user)]))
Clojureは表現力が高く、とても良い言語なんだけどまだ慣れないなー。