{"id":15502046,"url":"https://github.com/prodis/map_vs_list_performance","last_synced_at":"2025-03-28T18:19:01.603Z","repository":{"id":66942171,"uuid":"163150704","full_name":"prodis/map_vs_list_performance","owner":"prodis","description":null,"archived":false,"fork":false,"pushed_at":"2018-12-26T08:05:58.000Z","size":5,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-02T18:44:55.898Z","etag":null,"topics":["prodis"],"latest_commit_sha":null,"homepage":null,"language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/prodis.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-26T07:31:16.000Z","updated_at":"2018-12-26T08:06:00.000Z","dependencies_parsed_at":"2023-03-04T15:00:32.382Z","dependency_job_id":null,"html_url":"https://github.com/prodis/map_vs_list_performance","commit_stats":{"total_commits":3,"total_committers":2,"mean_commits":1.5,"dds":"0.33333333333333337","last_synced_commit":"266ee688b6f8a73615d10fcf043c4b8a588ab38f"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prodis%2Fmap_vs_list_performance","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prodis%2Fmap_vs_list_performance/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prodis%2Fmap_vs_list_performance/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prodis%2Fmap_vs_list_performance/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/prodis","download_url":"https://codeload.github.com/prodis/map_vs_list_performance/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246076931,"owners_count":20719894,"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":["prodis"],"created_at":"2024-10-02T09:07:19.756Z","updated_at":"2025-03-28T18:19:01.580Z","avatar_url":"https://github.com/prodis.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Map vs List Performance\n\nAn improved implementation for the code in the follow blog post:\nhttps://medium.com/@damonvjanis/map-vs-list-performance-in-elixir-c45642a25c6\n\n## Original implementation using `for` and `Enum.filter/2`\n\n```elixir\ncontacts = Enum.group_by(contacts, fn c -\u003e c[\"email\"] end)\n\nfor lead \u003c- leads do\n  matching_contacts = contacts[lead[\"email\"]]\n\n  if matching_contacts do\n    {lead, matching_contacts}\n  end\nend\n|\u003e Enum.filter(\u0026 \u00261)\n```\n\n## Alternative implementation using `Enum.reduce/3` and pattern matching\n\n```elixir\ncontacts = Enum.group_by(contacts, fn c -\u003e c[\"email\"] end)\n\nleads\n|\u003e Enum.reduce([], fn lead, acc -\u003e\n  email = lead[\"email\"]\n\n  case contacts do\n    %{^email =\u003e matching_contacts} -\u003e [{lead, matching_contacts} | acc]\n    _ -\u003e acc\n  end\nend)\n```\n\n## Benchmark\n\n```elixir\niex\u003e MapListPerformance.benchmark\n```\n\nSome results running on my notebook for 10,000 entries:\n```\nName                     ips        average  deviation         median         99th %\nimproved_match        137.89        7.25 ms    ±22.84%        6.72 ms       11.71 ms\nmap_match             116.17        8.61 ms    ±14.37%        8.19 ms       12.15 ms\n\nComparison:\nimproved_match        137.89\nmap_match             116.17 - 1.19x slower\n```\n\n```\nName                     ips        average  deviation         median         99th %\nimproved_match        110.63        9.04 ms    ±19.43%        8.92 ms       16.40 ms\nmap_match             107.59        9.29 ms    ±14.44%        8.99 ms       13.21 ms\n\nComparison:\nimproved_match        110.63\nmap_match             107.59 - 1.03x slower\n```\n\n```\nName                     ips        average  deviation         median         99th %\nimproved_match        104.47        9.57 ms    ±18.44%        9.46 ms       16.03 ms\nmap_match              83.67       11.95 ms    ±20.65%       11.75 ms       23.72 ms\n\nComparison:\nimproved_match        104.47\nmap_match              83.67 - 1.25x slower\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprodis%2Fmap_vs_list_performance","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprodis%2Fmap_vs_list_performance","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprodis%2Fmap_vs_list_performance/lists"}