Enum.into 和 Map.new 是否在内存中创建新对象?
Does Enum.into and Map.new create new objects in memory?
weekdays = [:monday, :tuesday, :wednesday, :thursday, :friday, :saturday, :sunday]
|> Enum.with_index
Map.new(weekdays)
Enum.into(weekdays, %{})
Map.new/1
和 Enum.into/2
在这里做的事情完全一样吗?
执行以下代码后,内存中将有多少个对象:
weekdays |> Map.new |> Map.new
和 weekdays |> Enum.into(%{}) |> Enum.into(%{})
?
我没有分析出差异,但是 Enum.into
依赖于 Collectable protocol, which for maps calls Map.put
for each element. However, Map.new
uses Erlang's :maps.from_list
, which is implemented in C。
所以我怀疑 Map.new
会更高效。
weekdays = [:monday, :tuesday, :wednesday, :thursday, :friday, :saturday, :sunday]
|> Enum.with_index
Map.new(weekdays)
Enum.into(weekdays, %{})
Map.new/1
和 Enum.into/2
在这里做的事情完全一样吗?
执行以下代码后,内存中将有多少个对象:
weekdays |> Map.new |> Map.new
和 weekdays |> Enum.into(%{}) |> Enum.into(%{})
?
我没有分析出差异,但是 Enum.into
依赖于 Collectable protocol, which for maps calls Map.put
for each element. However, Map.new
uses Erlang's :maps.from_list
, which is implemented in C。
所以我怀疑 Map.new
会更高效。