Угу
скинь где про это почитать
https://github.com/devonestes/fast-elixir#map-lookup-vs-pattern-matching-lookup-code
это map lookup а не сранивание
defmodule X do def cmp(list) do Enum.filter(list, fn x -> if x == [], do: true, else: false end) end def pm(list) do Enum.filter(list, & match?([], &1)) end end n = 10_000 list = [[]] |> Stream.cycle() |> Enum.take(n) |> Enum.zip(1..n) |> Enum.flat_map(fn {a, b} -> [a, b] end) Benchee.run(%{ "pm" => fn -> X.pm(list) end, "cmp" => fn -> X.cmp(list) end }) Name ips average deviation median 99th % pm 1.97 K 508.00 μs ±10.35% 488.60 μs 679.60 μs cmp 1.60 K 626.34 μs ±11.92% 606.18 μs 1151.46 μs Comparison: pm 1.97 K cmp 1.60 K - 1.23x slower +118.34 μs
Если убрать if x == [], do: true, else: false и оставить x == [] Результат вот такой Name ips average deviation median 99th % pm 1.97 K 508.16 μs ±10.02% 492.75 μs 693.95 μs cmp 1.57 K 637.88 μs ±15.06% 608.31 μs 1172.37 μs Comparison: pm 1.97 K cmp 1.57 K - 1.26x slower +129.72 μs
ок спасибо, интересно
а если is_list?
ето бойлерплейт
меня интересует не код, а причины различия в производительности
Что-то мне не нравится бенчмарк с 5 элементами в мапе. Требую бенчмарк с 10к элементов
Согласен, тест очень всратый и нерепрезентативный
а такие бывают в реальной жизни?)
Обсуждают сегодня