Logo

Programming-Idioms

This language bar is your friend. Select your favorite languages!

Idiom #280 Filter map

Remove all the elements from the map m that don't satisfy the predicate p.
Keep all the elements that do satisfy p.

Explain if the filtering happens in-place, i.e. if m is reused or if a new map is created.

for (auto it = m.begin(); it != m.end();) {
  if (!p(it->second)) {
    it = m.erase(it);
  } else {
    ++it;
  }
}
  real, dimension(:), allocatable :: a
  a = pack(a,p(a))
!
  elemental logical function p(x)
    real, intent(in) :: x
    p = x > 0.7
  end function p

for k, v := range m {
	if !p(v) {
		delete(m, k)
	}
}
import "maps"
maps.DeleteFunc(m, func(k K, v V) bool {
	return !p(v)
})
m.entrySet().removeIf(e -> !p.test(e));
import java.util.Iterator;
Iterator<?> i = m.entrySet().iterator();
while (i.hasNext()) 
    if (!p.test(i.next())) i.remove();
uses classes;
for i := m.count-1 downto 0 do
  if not p(m.items[i]) then m.delete(i);
$p = sub { $_[0] };

while ( ($k,$v) = each %m ) {
    $f{$k} = $v if $p->($v);
}

%m = %f;
$p = sub { $_[0] };

foreach $k (keys %m) {
    delete $m{$k} if not $p->( $m{$k} );            
}
m = {k:v for k, v in m.items() if p(v)}
for k in list(m):
    if p(m[k]): m.pop(k)
m = dict(filter(p, m.items()))
m.select{|k,v| p(v) }
m.retain(|_, &mut v| p(v));

New implementation...
< >
programming-idioms.org