NF> If you do many deletes, it is slow. It has to search the array for
NF> the element to delete and then move all the data that follows it.

NF> Note that slice! is not the same thing, when you do slice!(x) you remove
NF> the element at position x, not the element with content x. So the
NF> array does not have to be searched.

NF> If you want to do fast deletes based on content, you can use a hash to store
NF> the data. Store the data in the key of the hash and a dummy value such as
NF> "true" in the value.  You get fast lookups and there is no need to move
NF> elements.

This is 4 times as fast as arr.delete(obj) on a 500 element array, it
probably gets faster as the array grows:

hits = (200..300).to_a
1.upto(1000) do

  arr = []
  1.upto(500) do |x|
    arr.push(x)
  end

  hash = Hash.new
  arr.each_with_index do |a,i|
    hash[a] = i
  end

  hits.each do |hit|
    arr.slice!(hash[hit]) if hash[hit]
  end
end

 2.13 real         2.05 user         0.00 sys

I wonder if Array#- should do the same thing internally?  The above
method is 12 times as fast as Array#-

But I digress... I'm still struggling with select()... :-)  I can't
find any examples except in "server" code.

thanks,
-joe