Ruby Method of the Day - 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
1 2 3 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#!/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:0x87780 @current=true, @name="Bob">, #<Member:0x877a8 @current=false, @name="Fred">, #<Member:0x87794 @current=false, @name="Bill">, #<Member:0x8776c @current=true, @name="Alice">] After purging of non-current members... [#<Member:0x87780 @current=true, @name="Bob">, #<Member:0x8776c @current=true, @name="Alice">]
Documentation Reference
Ruby version 1.8.6
Trackbacks
Use the following link to trackback from your own site:
http://drotner.org/articles/trackback/70
