Iteraptor: рдЧрд╣рди рдкрд╛рд░рджрд░реНрд╢реА рдорд╛рдирдЪрд┐рддреНрд░ рд░реЗрдбрд╕ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп

рдЕрдореГрдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВред рдпрд╣ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдорд╣рд╛рди рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдХреЛ рдХреЛрдб рдХреЗ рдХреБрдЫ рдЕрдиреНрдп рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рд╕реЗ рдкрд░реЗ рднреНрд░рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрдм рд╣рдо рдПрдХ рдЧрд╣рд░реА рдиреЗрд╕реНрдЯреЗрдб рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддреЛ рдпрд╣ рдереЛрдбрд╝рд╛ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реЛрддрд╛ рд╣реИред


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╢рд╛рдирджрд╛рд░ Access рдПрдмреНрд╕рдЯреНрд░реИрдХреНрд╢рди рд╣реИ, рдЬреЛ Kernel рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдпрд╛рдд рдХреА рдЧрдИ рдЧрд╣рд░реА рдиреЗрд╕реНрдЯреЗрдб рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдЪрд╛рд░ рдмреБрдирд┐рдпрд╛рджреА рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ:



рдпреЗ рдЪрд╛рд░ Kernel.get_and_update_in/{2,3} (рдФрд░ Kernel.get_and_update_in/{2,3} рдЖрдорддреМрд░ рдкрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:


 iex> users = %{"john" => %{age: 27, mood: ""}, "meg" => %{age: 23}} #   iex> get_in(users, ["john", :age]) #тЗТ 27 #   iex> put_in(users, ["john", :age], 28) #тЗТ %{"john" => %{age: 28, mood: ""}, "meg" => %{age: 23}} #   iex> update_in(users, ["john", :mood], & &1 + 1) #тЗТ %{"john" => %{age: 28, mood: ""}, "meg" => %{age: 23}} #   iex> pop_in(users, ["john", :mood]) #тЗТ {"", %{"john" => %{age: 27}, "meg" => %{age: 23}}} 

рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдФрд░ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ... рд╕рд┐рд╡рд╛рдп рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдЬрдм рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред Access рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд▓рдХреНрд╖реНрдп рддрддреНрд╡ рдХрд╛ рдкрде рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рдХрдИ рдиреЗрд╕реНрдЯреЗрдб рдорд╛рдиреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░рд╛рд╢рд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди nil рд╕рд╛рде рд╕рднреА рдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдпрд╛ рдЙрди рд╕рднреА рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдЯрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд▓реЙрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)ред


рдиреЗрд╕реНрдЯреЗрдб рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдереЛрдХ рдЫреВрдЯ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Iteraptor рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред


TL; DR:





рд╕рдм рдХреБрдЫ Iterating рдЖрдк Elixir рдкрд░ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП Enumerable рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдЖрдк рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╕рдореВрд╣ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдирдХреНрд╢рд╛, рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкрддрд▓реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ ... рдореЗрд░реЗ рдлреНрд░рд╛рдВрд╕реАрд╕реА рдХреЛ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд╣рд╛рдБред рд╣рд░ рдХреЛрдИ рдЬреЛ рдЕрдореГрдд тАЛтАЛрдХреЗ рд╕рд╛рде рдХрдо рд╕реЗ рдХрдо рдЖрда рдШрдВрдЯреЗ рдмрд┐рддрд╛рддрд╛ рд╣реИ, рдЙрд╕рдиреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рджреЗрдЦрд╛ (рдФрд░ рд╕рдВрднрд╡рддрдГ рд▓рд┐рдЦрд╛ рднреА) рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИ:


 ~w|   | |> Enum.map(&String.capitalize/1) |> Enum.each(fn capitalized_name -> IO.puts "Hello, #{capitalized_name}!" end) # Hello, ! # Hello, ! # Hello, ! # Hello, ! 

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреЛрдб рдЬрд▓реНрджреА рд╣реА рдмреЛрдЭрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдЧрд╣рд░реА рдиреЗрд╕реНрдЯреЗрдб рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдиреЗрд╕реНрдЯреЗрдб рдХреАрд╡рд░реНрдбреНрд╕ , рд╕реВрдЪрд┐рдпреЛрдВ рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдореИрдк ред рдЗрд╕рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рдиреЗрд╕реНрдЯреЗрдб рд╕рдмрд╕реНрдХреНрд░рд┐рдкреНрд╢рди рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╣реИред


рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╢реНрди рдХреЗ рд╕рд╛рде "рдореИрдВ рдиреЗрд╕реНрдЯреЗрдб рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдХреИрд╕реЗ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВ?" рдореБрдЭреЗ рдЕрдВрддрддрдГ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ред рдПрд▓рд┐рдХреНрдЬрд╝рд┐рд░ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЪрд╛рд░реЛрдВ рдУрд░ рд╕рдм рдХреБрдЫ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИ, рдФрд░ рдЖрдк рд╕рдВрд░рдЪрдирд╛ рдХреА рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдХреЗрд╡рд▓ рдкрддреНрддрд┐рдпреЛрдВ рддрдХ рдиреАрдЪреЗ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рдмрджрд▓рддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЛрдб рдХреЗ рдХрд┐рд╕реА рднреА рд╣реБрдб рдХреЗ рддрд╣рдд, рдмреИрдЯрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдиреЗрд╕реНрдЯреЗрдб рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдмрджрд▓рдирд╛ рд╢рд╛рдпрдж рдПрдХрдорд╛рддреНрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЬреАрд╡рди рдореЗрдВ рджреЗрдЦрд╛ рд╣реИ рдЬрдм рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддреА рд╣реИред


рдирд┐рдпрдорд┐рдд рдорд╛рдирдЪрд┐рддреНрд░ рдЕрдЧреНрд░рджреВрддреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрдВрджрд░ рдореВрд▓реНрдп рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛрдбрд╝рд╛, рдЬреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдордзреНрдпрд╡рд░реНрддреА рдХреБрдВрдЬреА рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░реВрдмреА рдХреЛрд░ Hash#bury рдореЗрдВ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдпрд╣ рднреА рдЬрд╛рдирддреА рд╣реИ рдХрд┐ "рдЬрд╕реНрд╕реЛрдирд╛рдЗрдЬ" рдиреЗрд╕реНрдЯреЗрдб рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд╡рд╛рд▓реЗ рдХреАрд╡рд░реНрдбреНрд╕ рдЬрд┐рдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдЬреЛрдВрд╕ рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрджрд░ рдЙрдиреНрд╣реЗрдВ рджреЛ-рддрддреНрд╡ рдЯреНрдпреВрдкрд▓реНрд╕ рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( [foo: :bar] == [{:foo, :bar}] ), рдФрд░ рдЯреБрдкрд▓реНрд╕ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХреНрд░рдорд┐рдХ рдирд╣реАрдВ рд╣реИрдВред




рддреЛ, рдЪрд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЕрднрд┐рд╡рд╛рджрди рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдкреВрдВрдЫ рдФрд░ рдорд╛рдиреЗ рдореЗрдВ рдХрд┐рд╕реА рднреА рдореИрдк / рдХреАрд╡рд░реНрдб / рд╕реВрдЪреА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдФрд░ рдорд╛рдирдХ Enum.each/2 рдФрд░ Enum.map/2 рд▓рдЧрднрдЧ рд╕рд░рд▓ рд╣реИред


рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ


  • Iteraptor.each/3 рд╕рд╛рдзрд╛рд░рдг рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐, рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕реНрд╡рдпрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ;
  • Iteraptor.map/3 рдореИрдкрд┐рдВрдЧ, рдПрдХ рдореИрдк рдХреА рдЧрдИ рд╕рдВрд░рдЪрдирд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ;
  • Iteraptor.reduce/4 reduus, рдмреИрдЯрд░реА рд▓реМрдЯрд╛рддрд╛ рд╣реИ;
  • Iteraptor.map_reduce/4 рдореИрдк рдФрд░ рд░рд┐рдбреНрдпреВрд╕, рдореИрдкрд┐рдВрдЧ рдФрд░ рдмреИрдЯрд░реА рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдЯрдкрд▓ рд▓реМрдЯрд╛рддрд╛ рд╣реИ;
  • Iteraptor.filter/3 рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддрд╛ рд╣реИ;
  • Iteraptor.jsonify/2 , json рдореЗрдВ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдЪрдирд╛ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ: рд╕рднреА рдЦреЛрдЬрд╢рдмреНрджреЛрдВ рдХреЛ рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рддрд╛рд░реЛрдВ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
  • Iteraptor.Extras.bury/4 рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдореВрд▓реНрдп рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдордзреНрдпрд╡рд░реНрддреА рдХреБрдВрдЬреА Iteraptor.Extras.bury/4 ;
  • Iteraptor.to_flatmap/2 рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдПрдХ рдлреНрд▓реИрдЯ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдзреНрдпрд╛рди рд╕реЗ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ Iteraptor.to_flatmap/2 ; рдореВрд▓ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рдкрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
  • Iteraptor.from_flatmap/3 рдПрдХ рдЧрд╣рд░реА рдиреЗрд╕реНрдЯреЗрдб рдореЗрдВ рдЕрд╡рддрд▓ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд▓реИрдЯрдВрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ;
  • use Iteraptor.Iteraptable рдФрд░ Collectable рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде use Iteraptor.Iteraptable рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рд╕рд╛рде рд╣реА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП Access рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рд╣реИред

рд╢рдмреНрджреЛрдВ рдХреА рдХреАрдордд рдХреБрдЫ рднреА рдирд╣реАрдВ, рдХреЛрдб рджрд┐рдЦрд╛рдПрдВ!


Iteration, рдореИрдкрд┐рдВрдЧ, рд░рд┐рдбрдХреНрд╢рди


 # each iex> %{a: %{b: %{c: 42}}} |> Iteraptor.each(&IO.inspect(&1, label: "each"), yield: :all) # each: {[:a], %{b: %{c: 42}}} # each: {[:a, :b], %{c: 42}} # each: {[:a, :b, :c], 42} %{a: %{b: %{c: 42}}} # map iex> %{a: %{b: %{c: 42}}} |> Iteraptor.map(fn {k, _} -> Enum.join(k) end) %{a: %{b: %{c: "abc"}}} iex> %{a: %{b: %{c: 42}, d: "some"}} ...> |> Iteraptor.map(fn ...> {[_], _} = self -> self ...> {[_, _], _} -> "********" ...> end, yield: :all) %{a: %{b: "********", d: "some"}} # reduce iex> %{a: %{b: %{c: 42}}} ...> |> Iteraptor.reduce([], fn {k, _}, acc -> ...> [Enum.join(k, "_") | acc] ...> end, yield: :all) ...> |> :lists.reverse() ["a", "a_b", "a_b_c"] # map-reduce iex> %{a: %{b: %{c: 42}}} ...> |> Iteraptor.map_reduce([], fn ...> {k, %{} = v}, acc -> {тАЛ{k, v}, [Enum.join(k, ".") | acc]} ...> {k, v}, acc -> {тАЛ{k, v * 2}, [Enum.join(k, ".") <> "=" | acc]} ...> end, yield: :all) {тАЛ%{a: %{b: %{c: 42}}}, ["abc=", "ab", "a"]} # filter iex> %{a: %{b: 42, e: %{f: 3.14, c: 42}, d: %{c: 42}}, c: 42, d: 3.14} ...> |> Iteraptor.filter(fn {key, _} -> :c in key end, yield: :none) %{a: %{e: %{c: 42}, d: %{c: 42}}, c: 42} 

рдЧрд╣рд░рд╛ рдШреЛрдВрд╕рд▓рд╛ тЖТ рд╕рдкрд╛рдЯ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд


 iex> %{a: %{b: %{c: 42, d: [nil, 42]}, e: [:f, 42]}} ...> |> Iteraptor.to_flatmap(delimiter: "_") #тЗТ %{"a_b_c" => 42, "a_b_d_0" => nil, "a_b_d_1" => 42, "a_e_0" => :f, "a_e_1" => 42} iex> %{"abc": 42, "abd0": nil, "abd1": 42, "ae0": :f, "ae1": 42} ...> |> Iteraptor.from_flatmap #тЗТ %{a: %{b: %{c: 42, d: [nil, 42]}, e: [:f, 42]}} 

рдмрди


 iex> Iteraptor.jsonify([foo: [bar: [baz: :zoo], boo: 42]], values: true) %{"foo" => %{"bar" => %{"baz" => "zoo"}, "boo" => 42}} iex> Iteraptor.Extras.bury([foo: :bar], ~w|abcd|a, 42) [a: [b: [c: [d: 42]]], foo: :bar] 



рд╕реНрд░реЛрдд рдЦреБрд▓реЗ рд╣реИрдВ , рдкреНрд░рд▓реЗрдЦрди рдХрд╛рдлреА рд╡рд┐рд╕реНрддреГрдд рд╣реИ , рд╣рдо рд▓рдЧрднрдЧ рджреЛ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╣реИрдВред


рдПрдХ рдЕрдЪреНрдЫрд╛ рдЪрд▓рдирд╛ рд╣реИ!

Source: https://habr.com/ru/post/hi482478/


All Articles