Rails 3 — Как отсортировать массив по количеству дубликатов

#ruby-on-rails #arrays #sorting

#ruby-on-rails #массивы #сортировка

Вопрос:

Извините за вопрос новичка (я думаю …).

Допустим, у меня есть массив post_commenters с идентификатором пользователя и идентификатором комментария,
например:
1 — 27
2 — 31
1 — 54
3 — 87
1 — 12
2-54

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

Как я могу это сделать?

Я знаю, как его унифицировать:

 unique_user_list = array.uniq {|s| s.user_id}
  

Я знаю, как подсчитать дубликаты внутри массива:

 array.count { |u| u.name == unique_user_list.name  } # in a loop of user
  

Но я затрудняюсь смешивать и сортировать по количеству дубликатов…

Спасибо!

Редактировать

Хорошо, благодаря floatless, теперь я перехожу к чему-то более осязаемому — реальному примеру из foursquare api, использующему quimby gem:

 - current_user.all_checkins.group_by(amp;:venue["id"]).first(50).each do |c|
  = c.venue.id
  

Единственная проблема, он не … группируется.
Есть идеи?

Ответ №1:

Я думаю, вам следует использовать для этого GROUP BY предложение внутри вашего SQL-запроса, а затем просто COUNT сгруппировать комментарии.

Комментарии:

1. Мой пример был фиктивным примером — я получаю массив из api, не думаю, что group_by здесь работает…