Hi,
I’ve got an array a= [1,2,3,4,5,6] and want to access each second
element:
b=[2,4,6]. How is this done in ruby?
I know, that I can use a for-loob and modulo operator, but I think there
is a “ruby way” of doing this.
Thanks.
tomas
Hi,
I’ve got an array a= [1,2,3,4,5,6] and want to access each second
element:
b=[2,4,6]. How is this done in ruby?
I know, that I can use a for-loob and modulo operator, but I think there
is a “ruby way” of doing this.
Thanks.
tomas
On Mar 12, 2006, at 9:34 PM, Tomas F. wrote:
Thanks.
tomas–
Posted via http://www.ruby-forum.com/.
require ‘enumerator’
a = (1…10).to_a
p a.enum_for(:each_slice, 2).collect { |m| m[1] } # → [2, 4, 6, 8, 10]
– Daniel
I’ve got an array a= [1,2,3,4,5,6] and want to access each second
element:
b=[2,4,6]. How is this done in ruby?
a = [1,2,3,4,5,6]
(1…a.length).step(2) { |i| puts a[i] }
Daniel H. wrote:
is a “ruby way” of doing this.
p a.enum_for(:each_slice, 2).collect { |m| m[1] } # -> [2, 4, 6, 8, 10]– Daniel
enumerator is handy but it seems a bit like overkill for a task that can
be done with the builtin classes:
irb(main):009:0> ary = [1,2,3,4,5,6]
=> [1, 2, 3, 4, 5, 6]
irb(main):010:0> ary2 = []
=> []
irb(main):011:0> ary.each_with_index { |a, i| ary2 << a if i % 2 == 1 }
=> [1, 2, 3, 4, 5, 6]
irb(main):012:0> ary2
=> [2, 4, 6]
array.inject(false) do |alternate,element|
if alternate
# Your processing
end
!alternate
end
Daniel H. wrote:
is a “ruby way” of doing this.
p a.enum_for(:each_slice, 2).collect { |m| m[1] } # -> [2, 4, 6, 8, 10]– Daniel
f=1
[1,2,3,4,5,6].select{f=!f}.each{|x|p x}
Daniel H. wrote:
is a “ruby way” of doing this.
– Daniel
I might do it this way:
map , = (1…10).partition{|i| i%2==0}
map.each {|i| puts a[i]}
or this way
a.each_with_index {|a,i| if i%2 == 0; … ; end}
Depending on my needs and mood
On 12 mars 06, at 21:34, Tomas F. wrote:
I’ve got an array a= [1,2,3,4,5,6] and want to access each second
element:
b=[2,4,6]. How is this done in ruby?
irb(main):001:0> a = [1,2,3,4,5,6]
=> [1, 2, 3, 4, 5, 6]
irb(main):002:0> a.select {|e| a.index(e) % 2 == 1 }
=> [2, 4, 6]
On 3/12/06, Luc H. [email protected] wrote:
–
That’s a problem if there are duplicates in the array:
irb(main):012:0> a=[1,1,2,2,3,3,4,5]
=> [1, 1, 2, 2, 3, 3, 4, 5]
irb(main):013:0> a.select{|e| a.index(e) %2 == 1}
=> [5]
irb(main):014:0> s=true
=> true
irb(main):015:0> a.select{s=!s}
=> [1, 2, 3, 5]
irb(main):016:0>
-Adam
On Mon, 13 Mar 2006, Tomas F. wrote:
tomas
Fixnum#step is one of the easiest ways to do this:
harp:~ > cat a.rb
a = [1, 2, 3, 4, 5, 6]
1.step(a.size, 2){|i| p a[i]}
harp:~ > ruby a.rb
2
4
6
regards.
-a
On 13 mars 06, at 01:00, Adam S. wrote:
That’s a problem if there are duplicates in the array:
Yep, good catch.
Tomas F. wrote:
tomas
I’ve always been intrigued by creating a generalized enumeration system.
Have
you guys seen this: http://www.rubyweeklynews.org/20050710 : accessing
index
inside map. For example:
(1…10).collect.with_index { |v, i| v * i }
I think that is sweet! I wonder if it can be generalized enough to do
this:
file.collect.each_byte.with_index { |b, i| b + 1 }
Mike
[email protected] wrote:
returned (array vs. enumerator). It’s almost as if the call to
collect wasn’t a “real” call to collect, but rather a kind of
place-holder for a collect operation. I’m not sure.
Ok, what if you rearrange the order of the calls:
file.each_byte.with_index.collect { |b, i| b + 1 }
That’s more left-to-right object-oriented sounding. Come to think of it
I like
this better because now collect is at the end, and that is the the final
intent
(with the block being next to it).
Mike
Hi –
On Tue, 14 Mar 2006, Mike A. wrote:
tomas
I’ve always been intrigued by creating a generalized enumeration system.
Have you guys seen this: http://www.rubyweeklynews.org/20050710 : accessing
index inside map. For example:(1…10).collect.with_index { |v, i| v * i }
I think that is sweet! I wonder if it can be generalized enough to do this:
file.collect.each_byte.with_index { |b, i| b + 1 }
I’m not sure why, but to my eye this has always looked somewhat
obscure. I guess it’s something about having to read to the right,
even to the extent of not seeing a block, before I know what’s being
returned (array vs. enumerator). It’s almost as if the call to
collect wasn’t a “real” call to collect, but rather a kind of
place-holder for a collect operation. I’m not sure.
David
–
David A. Black ([email protected])
Ruby Power and Light, LLC (http://www.rubypowerandlight.com)
“Ruby for Rails” chapters now available
from Manning Early Access Program! Ruby for Rails
Hi –
On Tue, 14 Mar 2006, Mike A. wrote:
b=[2,4,6]. How is this done in ruby?
returned (array vs. enumerator). It’s almost as if the call to
collect wasn’t a “real” call to collect, but rather a kind of
place-holder for a collect operation. I’m not sure.Ok, what if you rearrange the order of the calls:
file.each_byte.with_index.collect { |b, i| b + 1 }
That’s more left-to-right object-oriented sounding. Come to think of it I
like this better because now collect is at the end, and that is the the final
intent (with the block being next to it).
There’s still something I don’t like about using method-chaining
syntax for this. It may just be a failure of imagination on my part.
David
–
David A. Black ([email protected])
Ruby Power and Light, LLC (http://www.rubypowerandlight.com)
“Ruby for Rails” chapters now available
from Manning Early Access Program! Ruby for Rails
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs