Ответ 1
h = { 'a' => 10, 'b' => 20, 'c' => 30 }
# get the first two
p Hash[*h.sort_by { |k,v| -v }[0..1].flatten]
EDITED
# get the first two (more concisely)
p Hash[h.sort_by { |k,v| -v }[0..1]]
У меня есть хэш, и я его отсортировал, используя значения
@friends_comment_count.sort_by{|k,v| -v}
Теперь я хочу только получить хэш из пяти элементов. Один из способов - использовать счетчик и разбить его на 5. Какой предпочтительный способ сделать в рубине?
Спасибо
h = { 'a' => 10, 'b' => 20, 'c' => 30 }
# get the first two
p Hash[*h.sort_by { |k,v| -v }[0..1].flatten]
EDITED
# get the first two (more concisely)
p Hash[h.sort_by { |k,v| -v }[0..1]]
Разве вы не можете сделать что-то вроде:
h = {"test"=>"1", "test2"=>"2", "test3"=>"3"}
Тогда, если вам нужны первые 2:
p h.first(2).to_h
Результат:
=> {"test"=>"1", "test2"=>"2"}
Новый рубин сам (будьте добры, если я ошибаюсь, ребята!), но работает ли это?
@friends_comment_count.sort_by{|k,v| -v}.first 5
Работает для меня в IRB, если я понял, чего вы пытаетесь достичь правильно
Вы не можете сортировать хеш и что sort_by
НЕ сортирует ваш хэш. Он возвращает отсортированный массив массивов.
Хеши не упорядочены по своей природе (даже в Ruby-реализации). Попытайтесь преобразовать свой хэш в массив и получить [0,4] из него
В Ruby 2.2.0 и более поздних версиях Enumerable#max_by
берет необязательный целочисленный аргумент, который заставляет его возвращать массив вместо одного элемента. Это означает, что вы можете:
h = { 'a' => 10, 'b' => 20, 'c' => 30 }
n = 2
p h.max_by(n, &:last).to_h # => {"b"=>20, "c"=>30}