сортировать хэш по одному значению, а не по другому - PullRequest
1 голос
/ 22 февраля 2012

Совершенно новый для Ruby. Пытаюсь отсортировать дублированный список сообщений FROM (отправителей) с количеством отправленных писем. Этот код работает, но сортируется по алфавиту. Я не могу понять, как его отсортировать, чтобы большинство # писем было сверху и т. Д.

results = []
mail_count = imap.search(["SINCE", @this_week.strftime("%d-%b-%Y")]).each do |message_id|
  envelope = imap.fetch(message_id, "ENVELOPE")[0].attr["ENVELOPE"]
  @from_array = envelope.from[0].name.to_a
  results << @from_array
end

# make the hash default to 0 so that += will work correctly
from_count = Hash.new(0)

# iterate over the array, counting duplicate entries
results.each do |v|
  from_count[v] += 1
end

from_count.sort_by do |k, v| v 
      puts "#{v} -- #{k}"
end

1 Ответ

1 голос
/ 22 февраля 2012
from_count.sort_by{|k,v| v }

Нужно сделать свое дело.

Затем вы можете перебрать отсортированный хеш и распечатать результаты.

Итак, ваш код будет выглядеть так:

from_count.sort_by{|k,v| v }.first(10).each{|k,v| puts "#{v} -- #{k}" }

sort_by сортирует его, затем, когда сортировка завершена, мы печатаем результаты.

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