Using step backward?


#1

I have an array myArray = [“22”, “31”, “56”, “89”, “47”]

I would like to produce a string like : “22#31#56#89>47<” where the
last item must be : >last_item<

case 1 item : [“22”] => “>22<”
case 2 items : [“22”, “31”] => “22#>31<”

case n items : [“22”, “31”, “56”, …, “89”, “47”] =>
“22#31#56#…#89>47<”

as it’s always the last items getting special treatment I thought
starting with " >"+myArray.last +"< " then
using 1.step(myArray.length-1, -1) do {… put # after item } and
concatenate if myArray.length > 1
but I cannot get it right… I cannot get simple

tfyh

joss


#2

Le samedi 24 février 2007 19:00, Josselin a écrit :

as it’s always the last items getting special treatment I thought
starting with " >"+myArray.last +"< " then
using 1.step(myArray.length-1, -1) do {… put # after item } and
concatenate if myArray.length > 1
but I cannot get it right… I cannot get simple

tfyh

joss

You may want to use Array#slice and Array#join to do that. And, as you
said,
make a special treatment for the last element.


#3

On Feb 24, 10:59 am, Josselin removed_email_address@domain.invalid wrote:

I have an array myArray = [“22”, “31”, “56”, “89”, “47”]

I would like to produce a string like : “22#31#56#89>47<” where the
last item must be : >last_item<

irb(main):001:0> myArray = [“22”, “31”, “56”, “89”, “47”]
=> [“22”, “31”, “56”, “89”, “47”]
irb(main):002:0> last = myArray.pop
=> “47”
irb(main):003:0> myArray.join(’#’)+">#{last}<"
=> “22#31#56#89>47<”


#4

On 2007-02-24 19:51:16 +0100, “Phrogz” removed_email_address@domain.invalid said:

irb(main):003:0> myArray.join(’#’)+">#{last}<"
=> “22#31#56#89>47<”

thanks it runs well for 1or n > 2 items but not for 2 items

myArray = [“22”, “31”]
=> [“22”, “31”]
irb(main):002:0> last = myArray.pop
=> “31”
irb(main):003:0> myArray.join(’#’)+">#{last}<"
=> “22>31<”

I should get “22#>31<”, the # must come after each item excepted the
last…


#5

Josselin wrote:

I have an array myArray = [“22”, “31”, “56”, “89”, “47”]

I would like to produce a string like : “22#31#56#89>47<” where the
last item must be : >last_item<
Here you say that you want the second to last item to have no # after
it,

I should get “22#>31<”, the # must come after each item excepted the
last…

but here you say you want a # after it.
If you want no # sign, then Josselin’s solution works.
If you want a # sign, just push that last item back on the array and
join it with #

myArray = [“22”, “31”, “56”, “89”, “47”]
myArray2 = [“22”, “47”]
myArray3 = [“47”]

arrays = [myArray, myArray2, myArray3]

arrays.each{|array| puts array.push(’>’ + array.pop.to_s +
‘<’).join(’#’)}


#6

On 2007-02-24 21:50:18 +0100, Gary W. removed_email_address@domain.invalid said:


case n items : [“22”, “31”, “56”, …, “89”, “47”] =>
“22#31#56#…#89>47<”

I’m assuming you have a typo in that last case and want the
string to end with: “#89#>47<”.

YES … sorry

puts format(%w{22})
puts format(%w{22 31})
puts format(%w{22 31 56})

$ ruby format.rb

<
22<
22#>31<
22#31#>56<

THAT’s it…, very useful… I put ‘#’ and ‘>’ ‘<’ charcaters just to
make it simple… but the objective is to insert html tags
to format correctly an output string…


#7

On Feb 24, 2007, at 1:00 PM, Josselin wrote:

I have an array myArray = [“22”, “31”, “56”, “89”, “47”]

I would like to produce a string like : “22#31#56#89>47<” where
the last item must be : >last_item<

case 1 item : [“22”] => “>22<”
case 2 items : [“22”, “31”] => “22#>31<”

case n items : [“22”, “31”, “56”, …, “89”, “47”] =>
“22#31#56#…#89>47<”

I’m assuming you have a typo in that last case and want the
string to end with: “#89#>47<”. It isn’t clear how you would
want an empty list formatted but here is one possibility:

$ cat format.rb

def format(list)
list[0…-2].push(">#{list.last}<").join(’#’)
end

puts format([])
puts format(%w{22})
puts format(%w{22 31})
puts format(%w{22 31 56})

$ ruby format.rb

<
22<
22#>31<
22#31#>56<

Gary W.