From: Mark Hubbart Date: 2005-05-07T02:27:58+09:00 Subject: Re: Array#squeeze On 5/6/05, Logan Capaldo wrote: > On 5/6/05, Martin DeMello wrote: > > The recent mention of String#squeeze made me wonder if it would not be a > > good idea to add a #squeeze method to Array (or possibly even to > > Enumerable) as well. Certainly I've needed it at least as often as I've > > needed #uniq > > > > martin > > > > > > Well here's a possible implementation: > > module Enumerable > def squeeze(*args) > raise ArgumentError.new("Provide 0 or 1 arguments") if > args.length > 1 > inject([]) do |a, b| > if args.length == 0 > if b == a.last > a > else > a << b > end > else > if b == a.last && a.last == args[0] > a > else > a << b > end > end > end > end > end String's squeeze allows arbitrary numbers of character arguments. II would think Enumerable#squeeze should do the same: module Enumerable def squeeze(*args) ary = [] check = proc{|item| args.empty?? true : args.include?(item) } each{|elem| ary << elem unless ary.last == elem and check[elem] } ary end end cheers, Mark