diff options
| author | Andrey Orst <andreyorst@gmail.com> | 2020-11-21 19:53:29 +0300 |
|---|---|---|
| committer | Andrey Orst <andreyorst@gmail.com> | 2020-11-21 19:53:29 +0300 |
| commit | 644fedfa61ad2372cc3b99e0ba18962433340a42 (patch) | |
| tree | d32b990d97df3ad7791db6a9499cfd9e624378ed /cljlib.fnl | |
| parent | 48f1ed65cf81803e6c5867b2bea18df1638718f8 (diff) | |
feature(core): more hash table functions
Diffstat (limited to 'cljlib.fnl')
| -rw-r--r-- | cljlib.fnl | 32 |
1 files changed, 31 insertions, 1 deletions
@@ -906,7 +906,7 @@ use." res)))))) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Hash map extras ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Hash table extras ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (fn* core.assoc "Associate key `k` with value `v` in `tbl`." @@ -955,6 +955,36 @@ found in the table." (set res not-found))) res)) +(fn* core.keys + "Returns a sequence of the table's keys, in the same order as [`seq`](#seq)." + [tbl] + (let [res []] + (each [k _ (pairs tbl)] + (insert res k)) + res)) + +(fn* core.vals + "Returns a sequence of the table's values, in the same order as [`seq`](#seq)." + [tbl] + (let [res []] + (each [_ v (pairs tbl)] + (insert res v)) + res)) + +(fn* core.find + "Returns the map entry for `key`, or `nil` if key not present." + [tbl key] + (when-some [v (. tbl key)] + [key v])) + +(fn* core.dissoc + "Remove `key` from table `tbl`." + ([tbl] tbl) + ([tbl key] + (doto tbl (tset key nil))) + ([tbl key & keys] + (apply dissoc (dissoc tbl key) keys))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Multimethods ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |