Method: Enumerable#filter_map

Defined in:
enum.c

#filter_map {|element| ... } ⇒ Array #filter_mapObject

Returns an array containing truthy elements returned by the block.

With a block given, calls the block with successive elements; returns an array containing each truthy value returned by the block:

(0..9).filter_map {|i| i * 2 if i.even? }                              # => [0, 4, 8, 12, 16]
{foo: 0, bar: 1, baz: 2}.filter_map {|key, value| key if value.even? } # => [:foo, :baz]

When no block given, returns an Enumerator.

Overloads:

  • #filter_map {|element| ... } ⇒ Array

    Yields:

    • (element)

    Returns:



568
569
570
571
572
573
574
575
576
577
578
579
# File 'enum.c', line 568

static VALUE
enum_filter_map(VALUE obj)
{
    VALUE ary;

    RETURN_SIZED_ENUMERATOR(obj, 0, 0, enum_size);

    ary = rb_ary_new();
    rb_block_call(obj, id_each, 0, 0, filter_map_i, ary);

    return ary;
}