From 3f7f0744944070b06daa8792c97298e713ea7314 Mon Sep 17 00:00:00 2001 From: Aleksei Magusev Date: Thu, 1 Oct 2015 00:17:24 +0200 Subject: Optimize `Keyword.new/2` function --- lib/elixir/lib/keyword.ex | 8 +++++--- 1 file 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 """ -- cgit v1.2.1