I’m so excited that 1.13 is bringing Map.filter/2 
<https://hexdocs.pm/elixir/master/Map.html#filter/2> and Map.reject/2 
<https://hexdocs.pm/elixir/master/Map.html#reject/2>. The performance 
improvements over the alternatives are nice, but I think making the 
author’s intent more clear is the biggest win.

With that said, I’d love to extend this with corresponding functions for 
filtering *just* based on the keys or values of the map. In practice, 
you're almost always discarding one of the two; you almost never see a map 
filtering on *both* the key and value at the same time.
While there's probably no performance benefit to be had, I think the added 
expressivity is worth it. Consider:

is_odd = fn val -> rem(val, 2) == 1 end
numbers = %{one: 1, two: 2, three: 3, four: 4} 

Map.filter(numbers, fn {_key, val} -> is_odd(val) end)
Map.filter_by_value(numbers, &is_odd/1) 

Cutting down on the boilerplate of unwrapping the key-value tuple makes 
this much more readable in my opinion.

If we wanted these, my suggestions would be:

   - Map.filter_by_key/2
   - Map.filter_by_value/2
   - Map.reject_by_key/2
   - Map.reject_by_value/2
   - Keyword versions of all four of the above

I realize this isn't a very "general" sort of library feature, and clearly 
it doesn't accomplish anything that wasn't possible before, so it might not 
be the direction the core folks want the language to go. I figured it can't 
hurt to pitch it, though. ☺️

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elixir-lang-core+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/9b6acd9c-d1bd-4286-b733-3405e177ecc8n%40googlegroups.com.

Reply via email to