# Array loops: new thread

**URL:** <https://www.ruby-forum.com/t/array-loops-new-thread/96966>\
**Category:** Ruby\
**Created:** [July 3, 2006, 8:29pm UTC](https://www.ruby-forum.com/t/array-loops-new-thread/96966 "2006-07-03T20:29:59Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![zanoni](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/e99b99/32.png) [@zanoni](https://www.ruby-forum.com/u/zanoni)\
**Post date:** [July 3, 2006, 8:29pm UTC](https://www.ruby-forum.com/t/array-loops-new-thread/96966/1 "2006-07-03T20:29:59Z")

</div>

I thought it would be better to start a new thread for my current  
issue, since the old one is filled with code in various stages.  
Apologies. Gives me a chance to ask more succinctly regarding the  
core issue.

This is just an example.  
I have 2 arrays

firstarray = [‘1’,'2,‘3’,‘4’,‘5’]  
secondarray = [‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’]

I’m looping through firstarray.each do |x|  
go through some blocks. At some point, either the start of the outter  
array or somewhere down in the conditional statements I need to find  
out if elements of firstarray are in secondarray. The only way I can  
fathom doing this right now is by starting another loop, i.e.  
secondarray.each do |y|. Problem is this seems to create constant  
problems where the outter loop / [0] element is going through the  
entire inner loop before proceeding on. to it’s next element. Maybe  
as someone suggested earlier today to me, to use break. Haven’t had  
much luck with that yet.

If this question makes sense, anyone have some suggestions , comments  
or anything else that might be helpful ?

TIA  
Stuart

---

<div class="post-metadata">

**Author:** ![zanoni](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/e99b99/32.png) [@zanoni](https://www.ruby-forum.com/u/zanoni)\
**Post date:** [July 3, 2006, 8:33pm UTC](https://www.ruby-forum.com/t/array-loops-new-thread/96966/2 "2006-07-03T20:33:20Z")

</div>

If you just need to see if an element is contained in an array try  
this…

secondarray.include?( ‘5’ )  
=\> true

mark

---

<div class="post-metadata">

**Author:** ![zanoni](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/e99b99/32.png) [@zanoni](https://www.ruby-forum.com/u/zanoni)\
**Post date:** [July 3, 2006, 8:36pm UTC](https://www.ruby-forum.com/t/array-loops-new-thread/96966/3 "2006-07-03T20:36:29Z")

</div>

On Tue, Jul 04, 2006 at 03:27:07AM +0900, Dark A. wrote:

> If this question makes sense, anyone have some suggestions , comments  
> or anything else that might be helpful ?
> 
> TIA  
> Stuart

How about something like:

secondarray.each do |x|  
if firstarray.include?(x)  
// do something  
end  
end

Brian

---

<div class="post-metadata">

**Author:** ![zanoni](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/e99b99/32.png) [@zanoni](https://www.ruby-forum.com/u/zanoni)\
**Post date:** [July 3, 2006, 9:17pm UTC](https://www.ruby-forum.com/t/array-loops-new-thread/96966/4 "2006-07-03T21:17:45Z")

</div>

On Jul 3, 2006, at 19:27, Dark A. wrote:

> I’m looping through firstarray.each do |x|  
> go through some blocks. At some point, either the start of the outter  
> array or somewhere down in the conditional statements I need to find  
> out if elements of firstarray are in secondarray. The only way I can  
> fathom doing this right now is by starting another loop, i.e.  
> secondarray.each do |y|. Problem is this seems to create constant  
> problems where the outter loop / [0] element is going through the  
> entire inner loop before proceeding on. to it’s next element. Maybe  
> as someone suggested earlier today to me, to use break. Haven’t had  
> much luck with that yet.

If you don’t want to use loops at all, you could use the intersection  
operator:

overlap = firstarray & secondarray

If you do want to use loops (which would be good practice for you),  
then just be careful to remember what each loop is doing. While  
using include? or the intersection operator wouldn’t hurt anything,  
given your trouble with nesting loops it’s probably good practice to  
learn how to do them properly - they’re an incredibly common  
construct in programming, and if you don’t learn how to build them  
for something simple you could get very stuck later on. Even your  
simple file comparison example wouldn’t work using include?, since  
the filenames include different directories.

The basic idea you should remember is that you can write the inner  
loop as if it were a normal loop working with a single variable. For  
example, if the outer loop is “firstarray.each do |first|” then you  
can write the inner loop as if you had this:

first = 1  
secondarray.each do |second|

# do things with first and second here.

end

Here’s a simple example which tells you exactly what it’s doing:

firstarray = [1, 2, 3]  
secondarray = [1, 3, 5]  
overlap = []  
firstarray.each do |first|  
puts “Outer loop setting first = #{first}”

# we want to compare first to everything in the second array:

secondarray.each do |second|  
puts “\tInner loop setting second = #{second}”  
print “\tComparing #{first} to #{second}…”  
if first == second  
puts “matched!”  
# do what we need to when we find a match  
overlap.push(first)  
# if you _know_ there’s a max of 1 match,  
# you could put a break here to stop looking  
# for more matches.  
else  
puts “no match.”  
end  
end  
puts “\tInner loop finished.”  
end  
puts “Outer loop finished.”  
puts overlap

matthew smillie.

---

<div class="post-metadata">

**Author:** ![zanoni](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/e99b99/32.png) [@zanoni](https://www.ruby-forum.com/u/zanoni)\
**Post date:** [July 3, 2006, 8:42pm UTC](https://www.ruby-forum.com/t/array-loops-new-thread/96966/5 "2006-07-03T20:42:39Z")

</div>

Cool guys, thank you. I was not aware of include and had just gone  
down the array class instance methods prior to asking for help. Leads  
me to conclude I should have read through it 3x not once.

Stuart
