Array.delete_if

Signature

array.delete_if {|element| block}   #=> array

array.delete_if {|element| block} iterates over all elements of
array and deletes an element from array if block returns true for that
element.

Examples

a = [1,2,3,4,5,6,7,8,9,10]    #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a.delete_if {|n| n % 2 == 0}  #=> [1, 3, 5, 7, 9]
a                             #=> [1, 3, 5, 7, 9]

The following is another usage example.

#!/usr/bin/env ruby
#
# A contrived example of using Array.delete_if
#

$VERBOSE = true

require 'pp'

# Member of an organization.
class Member
  attr_accessor :name
  attr_accessor :current
  def current?
    @current
  end
end


# Raw member data
members_data = [
  ['Bob', true],
  ['Fred', false],
  ['Bill', false],
  ['Alice', true]
]

# Create the members based on the raw member data
members = members_data.map do |entry|
  member = Member.new
  member.name = entry[0]
  member.current = entry[1]
  member
end

puts 'Before purging of non-current members...'
pp members
puts "\n"

# Purge non-current members.
members.delete_if {|member| !member.current?}

puts 'After purging of non-current members...'
pp members


Produces...

Before purging of non-current members...
[#<Member:0x1003a03d0 @current=true, @name="Bob">,
 #<Member:0x1003a0420 @current=false, @name="Fred">,
 #<Member:0x1003a03f8 @current=false, @name="Bill">,
 #<Member:0x1003a03a8 @current=true, @name="Alice">]

After purging of non-current members...
[#<Member:0x1003a03d0 @current=true, @name="Bob">,
 #<Member:0x1003a03a8 @current=true, @name="Alice">]

Documentation Reference

Ruby version 1.8.6

www.ruby-doc.org : Array.delete_if