On 2006-11-25 18:47:26 -0500, Brad Tilley <rtilley / vt.edu> said:

> In Python, I can do this to arrays:
> 
> added = [x for x in new_data if x not in old_data]
> removed = [x for x in old_data if x not in new_data]
> same = [x for x in new_data if x in old_data]
> 
> I believe this is known as list comprehension in Python. How is this done in
> Ruby?
> 
> Thanks,
> Brad

I found this while web searching for the same thing recently; I can't 
recall where I found it. It's a cute little hack.

class Array
  def comprehend
    return self unless block_given?
    result = []
    self.each { |i| result.push yield(i) }
    result.compact
  end
end

Then:

added = new_data.comprehend { |x| x if not old_data.include? x }
removed = old_data.comprehend { |x| x if not new_data.include? x }
same = new_data.comprehend { |x| x if old_data.include? x }

Best,
James