Forum: Ruby using step backward ?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
6b2144362fffd4f71cca755d4045846f?d=identicon&s=25 Josselin (Guest)
on 2007-02-24 19:01
(Received via mailing list)
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
85ae830f08b5ff5e39a1cbae9e3d0205?d=identicon&s=25 Olivier Renaud (Guest)
on 2007-02-24 19:18
(Received via mailing list)
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.
852a62a28f1de229dc861ce903b07a60?d=identicon&s=25 Gavin Kistner (phrogz)
on 2007-02-24 19:56
(Received via mailing list)
On Feb 24, 10:59 am, Josselin <josse...@wanadoo.fr> 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<"
6b2144362fffd4f71cca755d4045846f?d=identicon&s=25 Josselin (Guest)
on 2007-02-24 20:06
(Received via mailing list)
On 2007-02-24 19:51:16 +0100, "Phrogz" <gavin@refinery.com> 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..
Afabd225e57b433553138fead5a820d4?d=identicon&s=25 Raj Sahae (rajsahae)
on 2007-02-24 20:54
(Received via mailing list)
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('#')}
E7559e558ececa67c40f452483b9ac8c?d=identicon&s=25 Gary Wright (Guest)
on 2007-02-24 21:51
(Received via mailing list)
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 Wright
6b2144362fffd4f71cca755d4045846f?d=identicon&s=25 Josselin (Guest)
on 2007-02-25 00:30
(Received via mailing list)
On 2007-02-24 21:50:18 +0100, Gary Wright <gwtmp01@mac.com> 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...
This topic is locked and can not be replied to.