Skip to content

Instantly share code, notes, and snippets.

@HidetakaKojo
Created September 12, 2016 06:18
Show Gist options
  • Save HidetakaKojo/a1d1e1e400e9bc0e2c89df4a7a17b393 to your computer and use it in GitHub Desktop.
Save HidetakaKojo/a1d1e1e400e9bc0e2c89df4a7a17b393 to your computer and use it in GitHub Desktop.
list 操作のperformance

コードはこれ

defmodule Hoge do
  def create_list(num \\ 10), do: 1..num |> Enum.to_list

  def perf1_loop(num \\ 1000) do
  ¦ list = create_list(10)
  ¦ t1 = :erlang.timestamp()
  ¦ Enum.reduce(1..num, list, fn(_i, acc) ->
  ¦ ¦ perf1(acc)
  ¦ end)
  ¦ t2 = :erlang.timestamp()
  ¦ IO.puts :timer.now_diff(t2, t1)
  end
  def perf1(list) do
  ¦ [head|tail] = list
  ¦ (tail ++ [head])
  end
  def perf2_loop(num \\ 1000) do
  ¦ list = create_list(10)
  ¦ t1 = :erlang.timestamp()
  ¦ Enum.reduce(1..num, list, fn(_i, acc) ->
  ¦ ¦ perf2(acc)
  ¦ end)
  ¦ t2 = :erlang.timestamp()
  ¦ IO.puts :timer.now_diff(t2, t1)
  end
  def perf2(list) do
  ¦ [head|tail] = Enum.reverse(list)
  ¦ ([head] ++ Enum.reverse(tail))
  end
end

実行結果

iex(2)> Hoge.perf1_loop(100000)
9734
:ok
iex(3)> Hoge.perf2_loop(100000)
17839
:ok
iex(4)> Hoge.perf1_loop(1000000)
93887
:ok
iex(5)> Hoge.perf2_loop(1000000)
177239
:ok
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment