1 foldr and foldl in Ruby
ruby 代码
module Enumerable
def foldr(o, m = nil)
reverse.inject(m) {|m, i| m ? i.send(o, m) : i}
end
def foldl(o, m = nil)
inject(m) {|m, i| m ? m.send(o, i) : i}
end
end
[1, 2, 3, 4, 5].foldl(:+) #=> 15
[1, 2, 3, 4, 5].foldl(:*) #=> 120
[1, 2, 3, 4, 5].foldr(:-, 0) #=> 3
[1, 2, 3, 4, 5].foldl(:-, 0) #=> -15
2
ruby 代码
class Array
def missing_items
return [] if self.length <= 1
self.uniq!
self.sort! rescue nil
begin
(self.first..self.last).to_a - self
rescue
[]
end
end
end
>> [1, 3, 4, 10].missing_items.join(', ')
=> 2, 5, 6, 7, 8, 9
>> [1, 2, 7, 7.5, 8.2].missing_items.join(', ')
=> 3, 4, 5, 6, 8
>> %w(a b c f g j).missing_items.join(', ')
=> d, e, h, i
>> [2.5, {:test => 'value'}].missing_items.join(', ')
=>
最后更新:2007-01-19 09:24 |