How to improve enumerable find in ruby? -


i making request webservice api , have several ids pointing location. in order re assign results api contains id (sid). have following code:

location.all.each |city|   accommodations = accommodation.within_distance(city.lonlat, [1, 2])   lookups << lookup.new(city.id, accommodations.select(:supplier,:sid).to_a.map(&:serializable_hash)) end 

after webservice call try re assigning results ids (sid's) cities:

results = call_to_api  lookups.each | lup|   res << {:city=> lup.city, :accommodations => lup.accommodations.map{ |j|       results.find { |i|         i.sid == j['sid']       }     }   } end 

the lookups iteration in incredibly slow , takes 50s 4000 entries.

so how can improve performance point of view?

imagine have 3 lookups have accomodations a, b, , c.

the way done now, first lookup perform map , search a, b, , c.
second lookup perform map , search a, b, , c.

and on. given basic nature of search criteria, doesn't results accomodation a going change between different lookups in same collection.

in case consider caching results of each sid search , if ever have accomodation same sid, pull cache.

for example, like

cache = {} if cache.include?(yoursid)    // use cache[yoursid] else    mappings = //doyourmappinghere     // cache future use. might need dup    cache[yoursid] = mappings end 

of course under assumption same accomodation appears several times.


Comments

Popular posts from this blog

database - VFP Grid + SQL server 2008 - grid not showing correctly -

jquery - Set jPicker field to empty value -

.htaccess - htaccess convert request to clean url and add slash at the end of the url -