# Subtracting arrays

**URL:** <https://www.ruby-forum.com/t/subtracting-arrays/140224>\
**Category:** Ruby\
**Created:** [June 12, 2008, 1:06am UTC](https://www.ruby-forum.com/t/subtracting-arrays/140224 "2008-06-12T01:06:23Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![leveille](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/a88e57/32.png) [@leveille](https://www.ruby-forum.com/u/leveille)\
**Post date:** [June 12, 2008, 1:06am UTC](https://www.ruby-forum.com/t/subtracting-arrays/140224/1 "2008-06-12T01:06:23Z")

</div>

I suspect there is a cleaner way to do this with inject or collect.

a = [1,2,3]  
b = [1,1,1]  
c = []  
i = 0  
while i \< 3 do  
c \<\< a[i] - b[i]  
i += 1  
end

p c

=\> [0, 1, 2]

I tried a collect but can’t figure out how to get variables from outside  
the block to work inside the block. I was thinking something like  
c = []  
c.collect {|a,b| a - b}

but that is not it.

---

<div class="post-metadata">

**Author:** ![leveille](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/a88e57/32.png) [@leveille](https://www.ruby-forum.com/u/leveille)\
**Post date:** [June 12, 2008, 1:13am UTC](https://www.ruby-forum.com/t/subtracting-arrays/140224/2 "2008-06-12T01:13:00Z")

</div>

On Wed, Jun 11, 2008 at 7:06 PM, Jason L.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> while i \< 3 do  
> c \<\< a[i] - b[i]  
> i += 1  
> end

BTW, this kind of loop is what Enumerable#each\_with\_index is for.

–  
Avdi

Home: [http://avdi.org](http://avdi.org)  
Developer Blog: [Avdi Grimm, Code Cleric](http://avdi.org/devblog/)  
Twitter: [http://twitter.com/avdi](http://twitter.com/avdi)  
Journal: [http://avdi.livejournal.com](http://avdi.livejournal.com)

---

<div class="post-metadata">

**Author:** ![leveille](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/a88e57/32.png) [@leveille](https://www.ruby-forum.com/u/leveille)\
**Post date:** [June 12, 2008, 1:21am UTC](https://www.ruby-forum.com/t/subtracting-arrays/140224/3 "2008-06-12T01:21:09Z")

</div>

OK, I see.

so this works:

a = [1,2,3]  
b = [1,1,1]  
c = []  
i = 0  
while i \< 3 do  
c \<\< a[i] - b[i]  
i += 1  
end

p c.each\_with\_index {|item,index|}

Thanks.

---

<div class="post-metadata">

**Author:** ![leveille](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/a88e57/32.png) [@leveille](https://www.ruby-forum.com/u/leveille)\
**Post date:** [June 12, 2008, 1:49am UTC](https://www.ruby-forum.com/t/subtracting-arrays/140224/4 "2008-06-12T01:49:53Z")

</div>

On Wed, Jun 11, 2008 at 7:06 PM, Jason L.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> I suspect there is a cleaner way to do this with inject or collect.

> > a.zip(b).map do |x, y| x - y end  
> > =\> [0, 1, 2]

–  
Avdi

Home: [http://avdi.org](http://avdi.org)  
Developer Blog: [Avdi Grimm, Code Cleric](http://avdi.org/devblog/)  
Twitter: [http://twitter.com/avdi](http://twitter.com/avdi)  
Journal: [http://avdi.livejournal.com](http://avdi.livejournal.com)
