ActionsLike0
Feature #4787
closedInteger#each_modulo(n)
Description
I suggest a new feature of Integer to enumerate by iterated Integer#modulo.
An example implementation in Ruby is the following code:
class Integer
def each_modulo(n)
raise ArgumentError, "argument must be an Integer" unless n.is_a? Integer
raise ArgumentError, "argument must be larger than 1" if n <= 1
return Enumerator.new(self, :each_modulo, n) unless block_given?
q = self
while q > 0
q, r = q.divmod(n)
yield(r)
end
end
end
p 133.each_modulo(3).to_a #=> [1, 2, 2, 1, 1]
The following code is an example use of the feature:
class Integer
def each_thousand_separation
each_modulo(1000)
end
def thousand_separated_string(sep=',')
each_thousand_separation.map(&'%03d'.method(:%)).inject{|s, n| n + sep + s }
end
end
p 100_000_000_200.thousand_separated_string #=> "100,000,000,200"
I make an implementation in C, and attach the patch for that.
Files
Updated by mrkn (Kenta Murata) almost 14 years ago
- ruby -v changed from ruby 1.9.3dev (2011-05-27 trunk 31745) [x86_64-darwin10.7.0] to -
Updated by matz (Yukihiro Matsumoto) almost 14 years ago
- Target version changed from 1.9.3 to 2.0.0
Updated by yhara (Yutaka HARA) over 12 years ago
- Target version changed from 2.0.0 to 2.6
Updated by mrkn (Kenta Murata) almost 9 years ago
- Related to Feature #12116: `Fixnum#divmod`, `Bignum#divmod` with multiple arguments added
Updated by mrkn (Kenta Murata) almost 9 years ago
- Related to Feature #12447: Integer#digits for extracting digits of place-value notation in any base added
Updated by nobu (Nobuyoshi Nakada) almost 9 years ago
- Description updated (diff)
Updated by mrkn (Kenta Murata) over 7 years ago
- Status changed from Assigned to Closed
ActionsLike0