{"id":16659773,"url":"https://github.com/bsless/keys","last_synced_at":"2025-03-21T16:32:32.492Z","repository":{"id":64982000,"uuid":"580317403","full_name":"bsless/keys","owner":"bsless","description":"Select and rename keys as fast as possible in Clojure","archived":false,"fork":false,"pushed_at":"2022-12-20T14:30:58.000Z","size":17,"stargazers_count":18,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-17T19:48:56.143Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"epl-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bsless.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-12-20T09:07:16.000Z","updated_at":"2023-11-16T11:54:29.000Z","dependencies_parsed_at":"2022-12-28T19:55:33.636Z","dependency_job_id":null,"html_url":"https://github.com/bsless/keys","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bsless%2Fkeys","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bsless%2Fkeys/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bsless%2Fkeys/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bsless%2Fkeys/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bsless","download_url":"https://codeload.github.com/bsless/keys/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244829594,"owners_count":20517336,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-12T10:26:33.280Z","updated_at":"2025-03-21T16:32:32.212Z","avatar_url":"https://github.com/bsless.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Clojars Project](https://img.shields.io/clojars/v/io.github.bsless/keys.svg)](https://clojars.org/io.github.bsless/keys)\n[![cljdoc](https://cljdoc.org/badge/io.github.bsless/keys)](https://cljdoc.org/d/io.github.bsless/keys)\n![Test And Snapshot](https://github.com/bsless/keys/actions/workflows/test-and-snapshot.yml/badge.svg)\n\n# Keys\n\nSelect and rename keys as fast as possible with idiomatic Clojure\n\n## API\n\nSee [API](./API.md)\n\n## Dependency information\n\nDeps:\n\n```clojure\n{io.github.bsless/keys {:mvn/version \"...\"}}\n```\n\nLeiningen:\n\n```clojure\n[io.github.bsless/keys \"...\"]\n```\n\n## Usage\n\n```clojure\n(require '[bsless.keys :as keys])\n```\n\nThis library provides a few functions for selecting and renaming keys,\noperationally equivalent to the following clojure.core functions:\n\n| keys                                   | clojure.core                                                                |\n|:---------------------------------------|:----------------------------------------------------------------------------|\n| `(select m ks)`                        | `(select-keys m ks)`                                                        |\n| `((select ks) m)`                      | `(select-keys m ks)`                                                        |\n| `((select ks) to m)`                   | `(merge to (select-keys m ks))`                                             |\n| `(select* m k0 k1 k2)`                 | `(select-keys m [k0 k1 k2])`                                                |\n| `(select-into* to m k0 k1 k2)`         | `(merge to (select-keys m [k0 k1 k2]))`                                     |\n| `(select-as m kmap)`                   | `(-\u003e m (select-keys (keys kmap)) (set/rename-keys kmap))`                   |\n| `((select-as kmap) m)`                 | `(-\u003e m (select-keys (keys kmap)) (set/rename-keys kmap))`                   |\n| `((select-as kmap) to m)`              | `(merge to (-\u003e m (select-keys (keys kmap)) (set/rename-keys kmap)))`        |\n| `(select-as* m k0 k0' k1 k1')`         | `(-\u003e m (select-keys [k0 k1]) (set/rename-keys {k0 k0' k1 k1'}))`            |\n| `(select-into-as* to m k0 k0' k1 k1')` | `(merge to (-\u003e m (select-keys [k0 k1]) (set/rename-keys {k0 k0' k1 k1'})))` |\n| `(rename m kmap)`                      | `(set/rename-keys m kmap)`                                                  |\n| `((rename kmap) m)`                    | `(set/rename-keys m kmap)`                                                  |\n| `(rename* m k0 k0' k1 k1')`            | `(set/rename-keys m {k0 k0' k1 k1'})`                                       |\n\nAll implementations provide better performance than the core implementation.\n\nThe implementations which don't take a source map return a function\nwhich closes over all operations, in a similar manner to operators\nfusion.\n\n## Performance\n\n```clojure\n(quick-bench (select-keys {:a 1 :b 2 :c 3} [:a :b :c])) ;; =\u003e \"244.746154 ns\"\n(quick-bench (keys/select {:a 1 :b 2 :c 3} [:a :b :c])) ;; =\u003e \"97.587060 ns\"\n(quick-bench (apply keys/select {:a 1 :b 2 :c 3} [[:a :b :c]])) ;; =\u003e \"195.571249 ns\"\n(def f (keys/select [:a :b :c]))\n(quick-bench (f {:a 1 :b 2 :c 3})) ;; =\u003e \"106.211750 ns\"\n(quick-bench (keys/select* {:a 1 :b 2 :c 3} :a :b :c)) ;; =\u003e \"72.448903 ns\"\n(quick-bench (apply keys/select* {:a 1 :b 2 :c 3} [:a :b :c])) ;; =\u003e \"183.127248 ns\"\n```\n\n## License\n\nCopyright © 2022 Ben Sless\n\nDistributed under the Eclipse Public License version 1.0.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbsless%2Fkeys","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbsless%2Fkeys","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbsless%2Fkeys/lists"}