# Getting rid of a while loop

**URL:** <https://www.ruby-forum.com/t/getting-rid-of-a-while-loop/62712>\
**Category:** Ruby\
**Created:** [June 7, 2006, 2:53pm UTC](https://www.ruby-forum.com/t/getting-rid-of-a-while-loop/62712 "2006-06-07T14:53:35Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![customsgod](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/a4c791/32.png) [@customsgod](https://www.ruby-forum.com/u/customsgod)\
**Post date:** [June 7, 2006, 2:53pm UTC](https://www.ruby-forum.com/t/getting-rid-of-a-while-loop/62712/1 "2006-06-07T14:53:35Z")

</div>

I get a feeling there should be another way to make this happen without  
using a while loop, if anyone has any ideas that’d be great.

```
while question=file.gets
  answer=file.gets
  @question_array[counter]=Questions.new(question,answer, false)
  counter+=1
end
```

---

<div class="post-metadata">

**Author:** ![customsgod](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/a4c791/32.png) [@customsgod](https://www.ruby-forum.com/u/customsgod)\
**Post date:** [June 7, 2006, 3:22pm UTC](https://www.ruby-forum.com/t/getting-rid-of-a-while-loop/62712/2 "2006-06-07T15:22:24Z")

</div>

On Jun 7, 2006, at 7:53 AM, Tait P. wrote:

> I get a feeling there should be another way to make this happen  
> without  
> using a while loop, if anyone has any ideas that’d be great.
> 
> ```
> while question=file.gets
> answer=file.gets
> @question_array[counter]=Questions.new(question,answer, false)
> counter+=1
> end
> 
> ```

One way would be:

require “enumerator”

# …

file.each\_slice(2) do |question, answer|  
@question\_array \<\< Questions.new(question, answer, false)  
end

Hope that helps.

James Edward G. II

---

<div class="post-metadata">

**Author:** ![customsgod](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/a4c791/32.png) [@customsgod](https://www.ruby-forum.com/u/customsgod)\
**Post date:** [June 7, 2006, 3:49pm UTC](https://www.ruby-forum.com/t/getting-rid-of-a-while-loop/62712/3 "2006-06-07T15:49:56Z")

</div>

2006/6/7, James Edward G. II [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> > ```
> > end
> > 
> > ```
> 
> One way would be:
> 
> require “enumerator”
> 
> # …
> 
> file.each\_slice(2) do |question, answer|  
> @question\_array \<\< Questions.new(question, answer, false)  
> end

Thanks for leaving the inject version for me. 🙂

@question\_array = file.to\_enum(:each\_slice, 2).inject([]) do |qa,(quest,  
answ)|  
qa \<\< Questions.new(quest, answ, false)  
end

:-))

robert

---

<div class="post-metadata">

**Author:** ![customsgod](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/a4c791/32.png) [@customsgod](https://www.ruby-forum.com/u/customsgod)\
**Post date:** [June 7, 2006, 3:54pm UTC](https://www.ruby-forum.com/t/getting-rid-of-a-while-loop/62712/4 "2006-06-07T15:54:11Z")

</div>

while (questiom,answer = file.gets,file.gets) ?

Farrel

---

<div class="post-metadata">

**Author:** ![customsgod](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/a4c791/32.png) [@customsgod](https://www.ruby-forum.com/u/customsgod)\
**Post date:** [June 7, 2006, 4:59pm UTC](https://www.ruby-forum.com/t/getting-rid-of-a-while-loop/62712/5 "2006-06-07T16:59:04Z")

</div>

> > > without
> 
> @question\_array = file.to\_enum(:each\_slice, 2).inject([]) do  
> |qa,(quest, answ)|  
> qa \<\< Questions.new(quest, answ, false)  
> end
> 
> :-))
> 
> robert

hehe, nice, with 1.8.4

@question\_array = file.enum\_slice(2).map{|q, a| Questions.new(q, a,  
false)}

should be possible, isn’t it?

cheers

Simon

---

<div class="post-metadata">

**Author:** ![customsgod](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/a4c791/32.png) [@customsgod](https://www.ruby-forum.com/u/customsgod)\
**Post date:** [June 7, 2006, 5:59pm UTC](https://www.ruby-forum.com/t/getting-rid-of-a-while-loop/62712/6 "2006-06-07T17:59:40Z")

</div>

this is _really_ strange!

d:\workspace\>ruby -v  
ruby 1.8.4 (2005-12-24) [i386-mswin32]

irb(main):009:0\> [1,2,3].methods.grep(/slice/)  
=\> [“slice”, “slice!”]

the methods ‘each\_slice’ and ‘enum\_slice’ do not exist…

is this a bug of the windows build?

---

<div class="post-metadata">

**Author:** ![customsgod](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/a4c791/32.png) [@customsgod](https://www.ruby-forum.com/u/customsgod)\
**Post date:** [June 7, 2006, 9:48pm UTC](https://www.ruby-forum.com/t/getting-rid-of-a-while-loop/62712/7 "2006-06-07T21:48:33Z")

</div>

Chris schrieb:

> you forgot to  
> require ‘enumerator’
> 
> cheers

aaahhhh :-))

thanks so much!!

---

<div class="post-metadata">

**Author:** ![customsgod](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/a4c791/32.png) [@customsgod](https://www.ruby-forum.com/u/customsgod)\
**Post date:** [June 7, 2006, 6:16pm UTC](https://www.ruby-forum.com/t/getting-rid-of-a-while-loop/62712/8 "2006-06-07T18:16:53Z")

</div>

you forgot to  
require ‘enumerator’

cheers
