[Q] how to do insertion and smooth traversal simultaneously on array

  • Thread starter SHIGETOMI, Takuhiko
  • Start date
S

SHIGETOMI, Takuhiko

greetings, guys.

this is a pseudo-ruby code which shows what i am expecting.

a = [ 0, 1, 2, 3, 4, 5 ]
a.each_with_index do |x, i|
puts "[#{i}] : #{x}"
if i % 2 == 0 # even index ?
a.insert( i, ':)' )
skip 1 # <- this is a pseudo directive to skip the next element
# which has just been inserted now
end
end
puts a.size

expected output...

[0] : 0
[1] : 1
[2] : 2
[3] : 3
[4] : 4
[5] : 5
9 <-- means that 3 smileys have been inserted

as above, i want to traverse an array with some conditional insertion to
itself.

do anyone know cool way for that?

ttsp://void/3d/universe/milky-way-galaxy/orion-arm/sol-solar-system/
3rd-planet/fareast/jp/tky/shigetomi.takuhiko.5618
 
R

Robert Klemme

greetings, guys.

this is a pseudo-ruby code which shows what i am expecting.

a = [ 0, 1, 2, 3, 4, 5 ]
a.each_with_index do |x, i|
puts "[#{i}] : #{x}"
if i % 2 == 0 # even index ?
a.insert( i, ':)' )
skip 1 # <- this is a pseudo directive to skip the next element
# which has just been inserted now
end
end
puts a.size

expected output...

[0] : 0
[1] : 1
[2] : 2
[3] : 3
[4] : 4
[5] : 5
9 <-- means that 3 smileys have been inserted

as above, i want to traverse an array with some conditional insertion
to itself.

do anyone know cool way for that?

The easiest is probably to use the index for iterating and adjust it on
insertions. The alternative is to remember insertions and apply them
after the iteration (probably in reverse order to avoid complicated index
calculations).

Kind regards

robert
 
W

William James

greetings, guys.

this is a pseudo-ruby code which shows what i am expecting.

a = [ 0, 1, 2, 3, 4, 5 ]
a.each_with_index do |x, i|
puts "[#{i}] : #{x}"
if i % 2 == 0 # even index ?
a.insert( i, ':)' )
skip 1 # <- this is a pseudo directive to skip the next element
# which has just been inserted now
end
end
puts a.size

expected output...

[0] : 0
[1] : 1
[2] : 2
[3] : 3
[4] : 4
[5] : 5
9 <-- means that 3 smileys have been inserted

as above, i want to traverse an array with some conditional insertion to
itself.

If the array is "flat":
-----------------------------------------
a = [ 0, 1, 2, 3, 4, 5 ]
a.each_with_index do |x, i|
if i % 2 == 0 # even index ?
a = [ ":)", x ]
end
end
a.flatten!
p a
-----------------------------------------
[":)", 0, 1, ":)", 2, 3, ":)", 4, 5]


If the array isn't flat:
-----------------------------------------
a = [ [81,"&"], 82, 83, [84,"@"], 85 ]
a = (0...a.size).to_a.zip(a)
p a
a = a.inject([]) { |ary,x|
if x[0] % 2 == 0 # even index ?
ary += [ ":)", x[1] ]
else
ary << x[1]
end
}
p a
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top