Проблемы с сортировкой записей по уникальным атрибутам - PullRequest
0 голосов
/ 27 декабря 2008

Работая со следующим кодом, мне нужно возвращать только записи, в которых атрибут `point 'уникален. Кажется, я не могу туда добраться.

uniques = Item.find_all_by_item_id(item_id)
uniques.sort! {|a, b| b.point <=> a.point } # how do I reject the equal points?

Другими словами .. Я думаю, как вы делаете [0, 1, 1, 1, 2, 3, 3, 4, 4, 7] # => [0, 2, 7]?

Ответы [ 2 ]

1 голос
/ 27 декабря 2008

Я могу придумать несколько способов сделать это:

uniques.reject!{|u| uniques.select{|x| x == u}.size > 1}

В основном перебираем массив unique, а затем проверяем, существует ли более одного из этих элементов в массиве. Очевидно, есть много хитрых способов ускорить это, но для небольших массивов это должно сработать.

или

h = Hash.new(0)
uniques.each{|u| h[u] += 1}
h.reject{|k,v| v > 1}.keys

В основном посчитайте, сколько раз каждый элемент отображается в хэше, если его отклонили несколько раз, а затем просто посмотрите на ключи.

1 голос
/ 27 декабря 2008

Как насчет этого:

# Get the number of items with each point value
counts = Item.count("point", :group => "point")

# Get the IDs of all entries that only show up once
unique_ids = counts.collect { |count| count[0] if count[1] == 1 }.compact

unique_items = Item.find_all_by_id(unique_ids)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...