I’ve found myself writing the following code to address needs I have
processing formatted text files, but is this possible some other and I
am going through foolish gyrations here…
Here is the code:
class Array
alias :orig_each :each
def each(cnt = 1, &blk)
if cnt == 1
orig_each { |x| blk.call(x) }
else
0.step(self.size - 1,cnt) do |i|
yield(self.slice(i,cnt))
end
end
end
end
so I can do things like this
arr = [ key, value, value, key, value, value, key, value, value, … ]
arr.each(3) do |key,val1,val2|
#manipulate them as I see fit
end
Thanks for any help you can give!
Charles C.
Account Executive
Datatek, Inc.
800 536-4835 ext. 145
1 919 425-3145 (international)
[email protected]
On 11-May-06, at 10:53 AM, Charles C. wrote:
orig_each { |x| blk.call(x) }
arr = [ key, value, value, key, value, value, key, value, value, … ]
arr.each(3) do |key,val1,val2|
#manipulate them as I see fit
end
Thanks for any help you can give!
Have you looked at Enumerable#each_slice which is included in Array?
ratdog:~ mike$ ri Enumerable#each_slice
-------------------------------------------------- Enumerable#each_slice
e.each_slice(n) {…}
Iterates the given block for each slice of <n> elements.
e.g.:
(1..10).each_slice(3) {|a| p a}
# outputs below
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[10]
Mike
–
Mike S. [email protected]
http://www.stok.ca/~mike/
The “`Stok’ disclaimers” apply.
On 5/11/06, Charles C. [email protected] wrote:
orig_each { |x| blk.call(x) }
arr = [ key, value, value, key, value, value, key, value, value, … ]
1 919 425-3145 (international)
[email protected]
require ‘enumerator’
(1…9).to_enum.each_slice(3) { |x, y, z| puts “%i %i %i” % [x, y, z] }
1 2 3
4 5 6
7 8 9
-Alder
Mike S. wrote:
alias :orig_each :each
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[10]
Mike
exacly what I was looking for. I had checked the ruby docs, but only
looked under Array…
Sorry for the apparently stupid question.
Thanks,
Charles C.
Account Executive
Datatek, Inc.
800 536-4835 ext. 145
1 919 425-3145 (international)
[email protected]
On 5/11/06, Mike S. [email protected] wrote:
alias :orig_each :each
[1, 2, 3]
The “`Stok’ disclaimers” apply.
each_slice doesn’t wfm if I don’t require ‘enumerator’ first:
irb(main):001:0> (1…10).each_slice(3) {|a| p a}
(1…10).each_slice(3) {|a| p a}
NoMethodError: undefined method `each_slice’ for 1…10:Range
from (irb):1
irb(main):002:0> require ‘enumerator’
require ‘enumerator’
true
irb(main):003:0> (1…10).each_slice(3) {|a| p a}
(1…10).each_slice(3) {|a| p a}
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[10]
nil
You can as well use direct assignment, say if you want just every
third element you can do:
17:32:15 [~]: ruby -r enumerator -e ‘(1…10).each_slice(3) {|a,| p a}’
1
4
7
10
Kind regards
robert
On 5/11/06, Robert K. [email protected] wrote:
robert
cool, didn’t know about that one!
-Alder
On 11-May-06, at 11:09 AM, Charles C. wrote:
exacly what I was looking for. I had checked the ruby docs, but only
looked under Array…
Sorry for the apparently stupid question.
Of course it would help if the answer was correct - see Alder G.'s
response.
I should have tried it before posting!
Mike
–
Mike S. [email protected]
http://www.stok.ca/~mike/
The “`Stok’ disclaimers” apply.