diff options
author | Aleksei Magusev <lexmag@me.com> | 2015-10-01 00:17:24 +0200 |
---|---|---|
committer | Aleksei Magusev <lexmag@me.com> | 2015-10-01 00:17:24 +0200 |
commit | 3f7f0744944070b06daa8792c97298e713ea7314 (patch) | |
tree | c4c66e9e60ca4dcadc04a12397997e21cdd45f93 | |
parent | f70192bb6e5009e8533e60252f25f48e24b82d3b (diff) | |
download | elixir-3f7f0744944070b06daa8792c97298e713ea7314.tar.gz |
Optimize `Keyword.new/2` function
-rw-r--r-- | lib/elixir/lib/keyword.ex | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/elixir/lib/keyword.ex b/lib/elixir/lib/keyword.ex index 37bf2d54a..7f369bb66 100644 --- a/lib/elixir/lib/keyword.ex +++ b/lib/elixir/lib/keyword.ex @@ -91,10 +91,12 @@ defmodule Keyword do """ @spec new(Enum.t, (term -> {key, value})) :: t def new(pairs, transform) do - Enum.reduce pairs, [], fn i, keywords -> - {k, v} = transform.(i) - put(keywords, k, v) + fun = fn el, acc -> + {k, v} = transform.(el) + put_new(acc, k, v) end + keywords = :lists.foldl(fun, [], Enum.reverse(pairs)) + :lists.reverse(keywords) end @doc """ |