[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Nested blocks

Josselin

3/5/2007 3:18:00 PM

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"}

6 Answers

hemant

3/5/2007 3:38:00 PM

0

On 3/5/07, Josselin <josselin@wanadoo.fr> wrote:
> 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

#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.



--
gnufied
-----------
There was only one Road; that it was like a great river: its springs
were at every doorstep, and every path was its tributary.
http://people.inxsasia.c...

Robert Klemme

3/5/2007 4:01:00 PM

0

On 05.03.2007 16:37, hemant wrote:
> On 3/5/07, Josselin <josselin@wanadoo.fr> wrote:
>> 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
>
> #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.

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

Josselin

3/5/2007 4:22:00 PM

0

On 2007-03-05 17:00:58 +0100, Robert Klemme <shortcutter@googlemail.com> said:

> On 05.03.2007 16:37, hemant wrote:
>> On 3/5/07, Josselin <josselin@wanadoo.fr> wrote:
>>> 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
>>
>> #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.
>
> 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


Robert Klemme

3/5/2007 4:32:00 PM

0

On 05.03.2007 17:21, Josselin wrote:
> On 2007-03-05 17:00:58 +0100, Robert Klemme <shortcutter@googlemail.com>
> said:
>
>> On 05.03.2007 16:37, hemant wrote:
>>> On 3/5/07, Josselin <josselin@wanadoo.fr> wrote:
>>>> 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
>>>
>>> #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.
>>
>> 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
>
>
result = geocodes.map do |geocode|
{:search => adresse, :address => geocode[:address], ...}
end

robert

Josselin

3/5/2007 4:49:00 PM

0

On 2007-03-05 17:31:31 +0100, Robert Klemme <shortcutter@googlemail.com> said:

> On 05.03.2007 17:21, Josselin wrote:
>> On 2007-03-05 17:00:58 +0100, Robert Klemme <shortcutter@googlemail.com> said:
>>
>>> On 05.03.2007 16:37, hemant wrote:
>>>> On 3/5/07, Josselin <josselin@wanadoo.fr> wrote:
>>>>> 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
>>>>
>>>> #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.
>>>
>>> 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
>>
>>
> 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...

dblack

3/5/2007 4:55:00 PM

0