У меня есть массив хешей

a = [{name:"x", long:1.0, lat:2.0}, 
     {name:"y", long:2.0, lat:3.0}, 
     {name:"z", long:1.0, lat:2.0}]

Как удалить {name:"x", long:1.0, lat:2.0}, координаты которого равны последнему элементу, Другими словами, мне нужно оставить последним (в моем случае: с name:"z") хеш с уникальными координатами и удалить все предыдущие элементы с такими же координатами

4
Vyacheslav Loginov 12 Фев 2013 в 15:12
Никогда не сталкивался с такой проблемой ... Мне нужна какая-то алгоритмическая идея, рубиновый код, который я могу написать сам
 – 
Vyacheslav Loginov
12 Фев 2013 в 15:23
Да, напишите код, пожалуйста.
 – 
Sergio Tulentsev
12 Фев 2013 в 15:23

1 ответ

Лучший ответ

Попробуйте использовать Array#uniq с блоком:

a.uniq { |item| [item[:lat], item[:long]] }

Возвращаемое значение блока используется как значение для сравнения на уникальность.

Непонятно, почему вы хотите удалить «x», а не «z», но вы можете добиться этого с помощью примера набора данных, перевернув массив перед вызовом для него uniq.

10
Jimmy 12 Фев 2013 в 15:23
A.reverse.uniq {| item | [item [: lat], item [: long]]} .reverse мне помогли!
 – 
Vyacheslav Loginov
12 Фев 2013 в 15:28