Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > can 35.times do |i| be decrement of "i" ?

Reply
Thread Tools

can 35.times do |i| be decrement of "i" ?

 
 
Jian Lin
Guest
Posts: n/a
 
      10-20-2009
if there is a loop

35.times do |i|
print i
# do something here...
end

it is nice except i hope to count down the "i"...

it can be

print 35 - i

but then if the number needs to be 36 then i need to change both places.

or it can be

35.downto(1) do |i|

but doing so feel like needing to do some counting... 1 to 35 is in fact
35 times... so that's good

if 35.times can go decrement that would be nice too.

thanks.
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Rajinder Yadav
Guest
Posts: n/a
 
      10-20-2009
Jian Lin wrote:
> if there is a loop
>
> 35.times do |i|
> print i
> # do something here...
> end
>
> it is nice except i hope to count down the "i"...
>
> it can be
>
> print 35 - i
>
> but then if the number needs to be 36 then i need to change both places.
>
> or it can be
>
> 35.downto(1) do |i|
>
> but doing so feel like needing to do some counting... 1 to 35 is in fact
> 35 times... so that's good
>
> if 35.times can go decrement that would be nice too.
>
> thanks.


Not sure I follow what you're asking, or why downto is not a good solution? but
you could try this:

irb(main):008:0> count=5
irb(main):009:0> count.times { |n| puts count-n }
5
4
3
2
1
=> 5

--
Kind Regards,
Rajinder Yadav

http://DevMentor.org
Do Good ~ Share Freely

 
Reply With Quote
 
 
 
 
Jian Lin
Guest
Posts: n/a
 
      10-20-2009
Rajinder Yadav wrote:
> Jian Lin wrote:
>>
>>
>> if 35.times can go decrement that would be nice too.
>>
>> thanks.

>
> Not sure I follow what you're asking, or why downto is not a good
> solution? but
> you could try this:
>
> irb(main):008:0> count=5
> irb(main):009:0> count.times { |n| puts count-n }


1. I don't want to create an extra variable. It is a simple loop to
count down 35 times in a short program.

2. I want 35.times because it says it is 35 times, very clearly.
35.downto(1) you will need to think a little how many times it is. My
purpose is to do it 35 times, so 35.times is best, but I need the count
down. Something like

35.times.countdown do |i|
print i, " "
# do something
end

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Rob Biedenharn
Guest
Posts: n/a
 
      10-20-2009

On Oct 20, 2009, at 12:44 AM, Jian Lin wrote:

> Rajinder Yadav wrote:
>> Jian Lin wrote:
>>>
>>>
>>> if 35.times can go decrement that would be nice too.
>>>
>>> thanks.

>>
>> Not sure I follow what you're asking, or why downto is not a good
>> solution? but
>> you could try this:
>>
>> irb(main):008:0> count=5
>> irb(main):009:0> count.times { |n| puts count-n }

>
> 1. I don't want to create an extra variable. It is a simple loop to
> count down 35 times in a short program.
>
> 2. I want 35.times because it says it is 35 times, very clearly.
> 35.downto(1) you will need to think a little how many times it is.
> My
> purpose is to do it 35 times, so 35.times is best, but I need the
> count
> down. Something like
>
> 35.times.countdown do |i|
> print i, " "
> # do something
> end
>
> --
> Posted via http://www.ruby-forum.com/.
>



So DO IT that way. Ruby lets you!

irb> class Integer
def countdown
self.downto(1){|i|yield i}
end
end
=> nil
irb> 35.countdown {|i| print i, ' '}; puts "Boom!"
35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13
12 11 10 9 8 7 6 5 4 3 2 1 Boom!
=> nil

Happy?

-Rob

Rob Biedenharn http://agileconsultingllc.com
http://www.velocityreviews.com/forums/(E-Mail Removed)




 
Reply With Quote
 
Jian Lin
Guest
Posts: n/a
 
      10-20-2009
Rob Biedenharn wrote:

> irb> class Integer
> def countdown
> self.downto(1){|i|yield i}
> end
> end
> => nil
> irb> 35.countdown {|i| print i, ' '}; puts "Boom!"
> 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13
> 12 11 10 9 8 7 6 5 4 3 2 1 Boom!


yup, that's similar to what i was looking for. And 35.times doesn't
have any mechanism to count down i guess, not like

for i = 35 to 1 step -1
do something
next

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
botp
Guest
Posts: n/a
 
      10-20-2009
On Tue, Oct 20, 2009 at 1:14 PM, Jian Lin <(E-Mail Removed)> wrote:
> for i =3D 35 to 1 step -1


hmm if you modify the step var, the block would not loop 35 times, wc
you ask in your op

> =A0do something
> next


yours was a special case, so i was thinking something like,

> class Fixnum
> def countdown_by decrement =3D 1
> x =3D self
> x.times do |y|
> yield(x - decrement*y)
> end
> end
> end
>
> 5.countdown_by {|x| puts x}

5
4
3
2
1
=3D> 5

> 5.countdown_by(2) {|x| puts x}

5
3
1
-1
-3
=3D> 5

kind regards -botp

 
Reply With Quote
 
Rob Biedenharn
Guest
Posts: n/a
 
      10-20-2009

On Oct 20, 2009, at 1:14 AM, Jian Lin wrote:

> Rob Biedenharn wrote:
>
>> irb> class Integer
>> def countdown
>> self.downto(1){|i|yield i}
>> end
>> end
>> => nil
>> irb> 35.countdown {|i| print i, ' '}; puts "Boom!"
>> 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13
>> 12 11 10 9 8 7 6 5 4 3 2 1 Boom!

>
> yup, that's similar to what i was looking for. And 35.times doesn't
> have any mechanism to count down i guess, not like
>
> for i = 35 to 1 step -1
> do something
> next
>
> --
> Posted via http://www.ruby-forum.com/.
>



Just use Integer#step if that's how you want to think about it:

irb> 35.step(1,-1) {|i| print i,' '}; puts "Ha!"
35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13
12 11 10 9 8 7 6 5 4 3 2 1 Ha!
=> nil

-Rob

Rob Biedenharn http://agileconsultingllc.com
(E-Mail Removed)




 
Reply With Quote
 
Thairuby TH
Guest
Posts: n/a
 
      10-20-2009
#Ruby has "reverse_each" method.

irb(main):001:0> RUBY_VERSION
=> "1.9.1"

irb(main):002:0> 35.times {|i| print i, " "}
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
27 28 29
30 31 32 33 34 => 35

irb(main):003:0> 35.times.reverse_each {|i| print i, " "}
34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11
10 9 8 7
6 5 4 3 2 1 0 => #<Enumerator:0x142c840>

#Note that it counts 34 down to 0 (not 35 down to 1).
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Jian Lin
Guest
Posts: n/a
 
      10-20-2009
Thairuby TH wrote:

> irb(main):003:0> 35.times.reverse_each {|i| print i, " "}
> 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11
> 10 9 8 7
> 6 5 4 3 2 1 0 => #<Enumerator:0x142c840>
>
> #Note that it counts 34 down to 0 (not 35 down to 1).


counting from 34 to 0 is better since it is good for rocket take off =)
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
ambiguity of post-increment and post-decrement Mark Turney C++ 11 11-13-2006 04:41 PM
again some incr/decrement question rahul8143@gmail.com C Programming 1 07-02-2005 12:38 PM
map : iterator increment/decrement code John C++ 4 05-17-2005 09:51 AM
Increment, decrement, overflow, and underflow Ian Pilcher C Programming 5 01-21-2005 03:26 AM
How can I increment/decrement a multidemensional array without a loop? Hendrix C++ 1 06-29-2003 07:59 AM



Advertisments