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
Post a Comment