En

Enum در Elixir

98 تمرین

درباره‌ی Enum

Enum ماژولی بسیار کاربردی است که مجموعه‌ای از الگوریتم‌ها را برای کار با شمارش‌پذیرها فراهم می‌کند. امکانات زیر را ارائه می‌دهد:

و بسیاری موارد دیگر! برای فهرست کامل، به مستندات ماژول Enum مراجعه کنید.

شمارش‌پذیر

به‌طور کلی، شمارش‌پذیر به هر داده‌ای گفته می‌شود که بتوان روی آن پیمایش کرد، یعنی یک مجموعه. در Elixir، شمارش‌پذیر هر نوع داده‌ای است که پروتکل Enumerable را پیاده‌سازی کند. این‌ها عبارت‌اند از:

اگر هنوز همه‌ی آن‌ها را نمی‌شناسید، نگران نباشید.

هر کسی می‌تواند پروتکل Enumerable را برای ساختار داده‌ی سفارشی خود پیاده‌سازی کند.

کاهش

Enum.reduce/2 به شما امکان می‌دهد کل شمارش‌پذیر را به یک مقدار واحد کاهش دهید. برای این کار، از متغیری ویژه به نام انباشتگر استفاده می‌شود. انباشتگر وضعیت میانی کاهش را بین تکرارها نگه می‌دارد. همین آن را به یکی از قدرتمندترین توابع برای شمارش‌پذیرها تبدیل می‌کند. بسیاری از توابع تخصصی دیگر را می‌توان با reduce که عمومی‌تر است جایگزین کرد. برای مثال...

یافتن بیشینه:

Enum.max([4, 20, 31, 9, 2])
# => 31

Enum.reduce([4, 20, 31, 9, 2], nil, fn x, acc ->
  cond do
    acc == nil -> x
    x > acc -> x
    x <= acc -> acc
  end
end)

# => 31

و حتی نگاشت (اما لازم است نتیجه را بعد از آن معکوس کنید):

Enum.map([1, 2, 3, 4, 5], fn x -> x + 10 end)
# => [11, 12, 13, 14, 15]

Enum.reduce([1, 2, 3, 4, 5], [], fn x, acc -> [x + 10 | acc] end)
# => [15, 14, 13, 12, 11]

نگاشت نقشه‌ها

  • با Map.new/2:

    %{a: 1, b: 2}
    |> Map.new(fn {key, value} -> {key, value * 10} end)
    
  • با Enum.into/3:

    %{a: 1, b: 2}
    |> Enum.into(%{}, fn {key, value} -> {key, value * 10} end)
    
  • با Enum.map/2:

    %{a: 1, b: 2}
    |> Enum.map(fn {key, value} -> {key, value * 10} end)
    |> Enum.into(%{})
    
ویرایش از طریق GitHub این پیوند در پنجره یا زبانه‌ی جدیدی باز می‌شود

Enum را یاد بگیرید

تمرین کردن قفل شده است

برای تمرین Enum قفل 10 تمرین دیگر را باز کنید