summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksei Magusev <lexmag@me.com>2015-10-01 00:17:24 +0200
committerAleksei Magusev <lexmag@me.com>2015-10-01 00:17:24 +0200
commit3f7f0744944070b06daa8792c97298e713ea7314 (patch)
treec4c66e9e60ca4dcadc04a12397997e21cdd45f93
parentf70192bb6e5009e8533e60252f25f48e24b82d3b (diff)
downloadelixir-3f7f0744944070b06daa8792c97298e713ea7314.tar.gz
Optimize `Keyword.new/2` function
-rw-r--r--lib/elixir/lib/keyword.ex8
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 """