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(:+)
- [1, 2, 3, 4, 5].foldl(:*)
-
- [1, 2, 3, 4, 5].foldr(:-, 0)
- [1, 2, 3, 4, 5].foldl(:-, 0)
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(', ')
- =>