------ art_2941_25615067.1175596921971 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline On 4/3/07, Gary Wright <gwtmp01 / mac.com> wrote: > > > On Apr 3, 2007, at 1:44 AM, Brian Candler wrote: > > Try thread around > > http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/72518 > > for some sample implementations. > > Building off of Brian's suggestion in that thread, here > is a way to provide a 'countdown' as the end of the iteration > approaches. Default is to only flag the last item but you > can ask for any number of items to be flagged. > > This is the first time I've found a need for the numeric return > value of nonzero? > > module Enumerable > def each_with_countdown(count > queue ] > each_with_index do |item,index| > if index > (count) > yield queue.shift, true > end > queue.push(item) > end > queue.each_with_index do |item, index| > yield item, (count - index).nonzero? > end > end > end > > [1,2,3,4,5,6].each_with_countdown(3) { |item, more| > case more > when TrueClass > puts "#{item}" > when 3 > puts "#{item}, next to next to next to last item!" > when 2 > puts "#{item}, next to next to last item!" > when 1 > puts "#{item}, next to last item!" > when NilClass > puts "#{item}, last item" > end > } > > [1,2,3,4,5,6].each_with_countdown(1) { |item, more| > puts "#{item}, more: #{more.inspect}" > } > > [1].each_with_countdown { |item, more| > puts "#{item}, more: #{more.inspect}" > } > > StringIO.new("line1\nline2\nline3").each_with_countdown do |line, more| > if more > puts line > else > puts "last: #{line}" > end > end > > > Gary Wright > > > > > I like this solution! Thank you. ------ art_2941_25615067.1175596921971--