# Nested blocks

**URL:** <https://www.ruby-forum.com/t/nested-blocks/87722>\
**Category:** Ruby\
**Created:** [March 5, 2007, 4:21pm UTC](https://www.ruby-forum.com/t/nested-blocks/87722 "2007-03-05T16:21:51Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Josselin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Josselin](https://www.ruby-forum.com/u/Josselin)\
**Post date:** [March 5, 2007, 4:21pm UTC](https://www.ruby-forum.com/t/nested-blocks/87722/1 "2007-03-05T16:21:51Z")

</div>

I am trying to nest 2 blocks, it’s wrong but but I cannot find why …  
need some help… I get only one resulting item

I get info in geocodes Array (3 items) , need to get some of them into  
‘places’ another Array

```
  places = [{:search => adresse}]

  geocodes.each { | geocode |
       places.collect { | place |
            place[:address] = geocode[:address]
            place[:latitude] = geocode[:latitude]
            place[:longitude] = geocode[:longitude]
      }
  }

```

geocodes.nitems =\> 3

geocodes[0]  
=\> #\<struct Ym4r::GmPlugin::Geocoding::Placemark address=“Rue  
Caulaincourt, 75018 18ème Arrondissement, Paris, France”,  
country\_code=“FR”, administrative\_area=“Ile-de-France”,  
sub\_administrative\_area=“Paris”, locality=“Paris”,  
dependent\_locality=“18ème Arrondissement”, thoroughfare=“Rue  
Caulaincourt”, postal\_code=“75018”, longitude=2.333944,  
latitude=48.888226

geocodes[1]  
=\> #\<struct Ym4r::GmPlugin::Geocoding::Placemark address=“Lamarck -  
Caulaincourt, France”, country\_code=“FR”,  
administrative\_area=“Ile-de-France”, sub\_administrative\_area=“Paris”,  
locality=“Paris”, dependent\_locality=“18ème Arrondissement”,  
thoroughfare=“Rue Caulaincourt”, postal\_code=“75018”,  
longitude=2.333944, latitude=48.888226\>

geocodes[2]  
=\> #\<struct Ym4r::GmPlugin::Geocoding::Placemark address=“Square  
Caulaincourt, 75018 18ème Arrondissement, Paris, France”,  
country\_code=“FR”, administrative\_area=“Ile-de-France”,  
sub\_administrative\_area=“Paris”, locality=“Paris”,  
dependent\_locality=“18ème Arrondissement”, thoroughfare=“Rue  
Caulaincourt”, postal\_code=“75018”, longitude=2.333944,  
latitude=48.888226

places.nitems =\> 1

places[0]  
=\> {:longitude=\>2.333944, :latitude=\>48.888226,  
:search=\>“caulaincourt,75018, france”, :address=\>“Square Caulaincourt,  
75018 18ème Arrondissement, Paris, France”}

---

<div class="post-metadata">

**Author:** ![Josselin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Josselin](https://www.ruby-forum.com/u/Josselin)\
**Post date:** [March 5, 2007, 4:38pm UTC](https://www.ruby-forum.com/t/nested-blocks/87722/2 "2007-03-05T16:38:54Z")

</div>

On 3/5/07, Josselin [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> ```
> place[:address] = geocode[:address]
> place[:latitude] = geocode[:latitude]
> place[:longitude] = geocode[:longitude]
> }
> }
> 
> ```
> 
> geocodes.nitems =\> 3

#collect doesn’t modify the existing Enumerable and normally returns  
a Enumerable/Array.  
In other words, your inner block doesn’t modify places array at all.

---

<div class="post-metadata">

**Author:** ![Josselin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Josselin](https://www.ruby-forum.com/u/Josselin)\
**Post date:** [March 5, 2007, 5:10pm UTC](https://www.ruby-forum.com/t/nested-blocks/87722/3 "2007-03-05T17:10:05Z")

</div>

On 05.03.2007 16:37, hemant wrote:

> > ```
> > places.collect { | place |
> > 
> > ```
> 
> In other words, your inner block doesn’t modify places array at all.  
> No need for collect or collect! at all since he is modifying the  
> Hash(es) inside places. And since places contains only 1 element it  
> still does so after the iteration. Josselin, what do you expect to get?

Kind regards

robert

---

<div class="post-metadata">

**Author:** ![Josselin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Josselin](https://www.ruby-forum.com/u/Josselin)\
**Post date:** [March 5, 2007, 5:36pm UTC](https://www.ruby-forum.com/t/nested-blocks/87722/4 "2007-03-05T17:36:10Z")

</div>

On 05.03.2007 17:21, Josselin wrote:

> > > > geocodes.nitems =\> 3
> 
> =\> {:longitude=\> geocodes[i][longitude],  
> :latitude=\>geocodes[i][longitude], :address=\>geocodes[i][address]}
> 
> joss

result = geocodes.map do |geocode|  
{:search =\> adresse, :address =\> geocode[:address], …}  
end

robert

---

<div class="post-metadata">

**Author:** ![Josselin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Josselin](https://www.ruby-forum.com/u/Josselin)\
**Post date:** [March 5, 2007, 5:26pm UTC](https://www.ruby-forum.com/t/nested-blocks/87722/5 "2007-03-05T17:26:09Z")

</div>

On 2007-03-05 17:00:58 +0100, Robert K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
said:

> > > ```
> > > geocodes.each { | geocode |
> > > 
> > > ```
> > 
> > a Enumerable/Array.  
> > In other words, your inner block doesn’t modify places array at all.
> 
> No need for collect or collect! at all since he is modifying the  
> Hash(es) inside places. And since places contains only 1 element it  
> still does so after the iteration. Josselin, what do you expect to get?
> 
> Kind regards
> 
> robert

Thanks for your comments…

well I expect to get 3 items (one for each geocodes item)  
where places[i][:longitude] = geocodes[i][:longitude], …  
I know that I could do an iteration (as in C) but I tried to do it  
without using an indexation …

places[i]  
=\> {:longitude=\> geocodes[i][longitude],  
:latitude=\>geocodes[i][longitude], :address=\>geocodes[i][address]}

joss

---

<div class="post-metadata">

**Author:** ![Josselin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Josselin](https://www.ruby-forum.com/u/Josselin)\
**Post date:** [March 5, 2007, 5:55pm UTC](https://www.ruby-forum.com/t/nested-blocks/87722/6 "2007-03-05T17:55:14Z")

</div>

Hi –

On Tue, 6 Mar 2007, Josselin wrote:

> thanks… so map and collect give the same result… not easy to forget  
> iteration model … so powerful methods w Ruby…

They’re actually the same method – just two names bound to exactly  
the same thing.

David

---

<div class="post-metadata">

**Author:** ![Josselin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9de0a6/32.png) [@Josselin](https://www.ruby-forum.com/u/Josselin)\
**Post date:** [March 5, 2007, 5:51pm UTC](https://www.ruby-forum.com/t/nested-blocks/87722/7 "2007-03-05T17:51:14Z")

</div>

On 2007-03-05 17:31:31 +0100, Robert K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
said:

> > > > > geocodes.nitems =\> 3
> > 
> > =\> {:longitude=\> geocodes[i][longitude],  
> > :latitude=\>geocodes[i][longitude], :address=\>geocodes[i][address]}
> > 
> > joss
> 
> result = geocodes.map do |geocode|  
> {:search =\> adresse, :address =\> geocode[:address], …}  
> end
> 
> robert

thanks… so map and collect give the same result… not easy to  
forget iteration model … so powerful methods w Ruby…
