Сравните два хэша, затем удалите, если ID не указан - PullRequest
0 голосов
/ 26 августа 2011

У меня есть два хэша, один выглядит так:

{:id => "SG_5viWPcG0SLvszXbBxogLkT_51.514568_-0.126244@1300740367",
 :name => "Shellys Shoes",
 :lat => 51.5145683289,
 :lng => -0.1262439936}

Это всего лишь одна запись, их около 80,

Второй мой хэш:

{"id":"SG_2zNWLdG9147g2ROvNWpDHr_51.512360_0.124480@1300740823",
"lat":51.5123596191,
"lng":-0.1244800016}

Хэш, приведенный выше, снова является только одной записью, однако он является продуктом хэша, приведенного выше, после прохождения API, который не возвращает все записи, только действительные, я хочу сравнить верхнюю частьхеш с нижним и удалите все записи, которых нет в нижнем хеш,

, например, если id: SG_5viWPcG0SLvszXbBxogLkT_51.514568_-0.126244@1300740367 не во втором хеш, затем удалите эту запись,

Я могу сравнить хэши, но не вижу, как удалить, если ID не указан?

Спасибо, ребята!

edit: это возвращаемые значения ....

{"points":[{"id":"SG_75oKOgvgFPLjwmdyAKA2rq_51.512825_-0.124655@1300740283","lat":51.5128250122,"lng":-0.1246550009},{"id":"SG_0Sz9CBF5t70tdAffTKYNSg_51.512360_-0.124388@1300740807","lat":51.5123596191,"lng":-0.1243880019},{"id":"SG_2zNWLdG9147g2ROvNWpDHr_51.512360_-0.124480@1300740823","lat":51.5123596191,"lng":-0.1244800016},{"id":"SG_5PvBx89sLPgplapegVJDFv_51.513100_-0.124809@1300740049","lat":51.5130996704,"lng":-0.1248089969},{"id":"SG_4luyHFi5R2f1w3cpjT61ik_51.513393_-0.124556@1300740719","lat":51.5133934021,"lng":-0.1245559976},{"id":"SG_4luyHFi5R2f1w3cpjT61ik_51.513393_-0.124556@1300740719","lat":51.5133934021,"lng":-0.1245559976},{"id":"SG_0pEvrpt7bs42jPAxFSrquC_51.512264_-0.124413@1300740807","lat":51.5122642517,"lng":-0.1244129986},]}

Это оригинальный формат:

[ {         :id => "SG_2Km6LX3tEcFwx24eotTHIY_51.513016_-0.123721@1300740411",
            :name => "French Connection Group Plc",
             :lat => 51.5130157471,
             :lng => -0.1237210035
}]

1 Ответ

0 голосов
/ 26 августа 2011

Вы можете собрать список действительных идентификаторов из возвращенных значений с чем-то вроде:

valid_ids = returned["points"].collect { |point| point["id"] }

Затем вы можете удалить недействительные значения из оригинала с помощью чего-то вроде:

original.delete_if { |entry| !valid_ids.include? entry[:id] }
...