У меня есть следующий хеш {"CA"=>2, "MI"=>1, "NY"=>1}
Как вернуть пару максимальных значений ключа с помощью ruby? Я бы хотел, чтобы он вернул "CA"
У меня есть следующий хеш {"CA"=>2, "MI"=>1, "NY"=>1}
Как вернуть пару максимальных значений ключа с помощью ruby? Я бы хотел, чтобы он вернул "CA"
Это приведет к возврату пары max-хэш-ключей в зависимости от значения хэш-элементов:
def largest_hash_key(hash)
hash.max_by{|k,v| v}
end
Я нашел этот путь, вернул ключ первого максимального значения
a.key(a.values.max)
Другой способ может быть следующим:
hash.each { |k, v| puts k if v == hash.values.max }
Это выполняется через каждую пару ключей и возвращает (или в этом случае puts's) ключ (ы), где значение равно максимальному из всех значений. Это должно вернуть более одного ключа, если есть галстук.
Вы можете использовать метод select, если хотите вернуть пару значений ключа:
hash.select {|k,v| v == hash.values.max }
Если вы хотите получить более одной пары ключевых значений на основе порядка (второй по величине, наименьший и т.д.), более эффективным способом будет сортировка хэша один раз, а затем получение желаемых результатов.
def descend_sort(hash)
hash = hash.sort_by {|k,v| v}.reverse
end
Ключ наибольшего значения
puts *hash[0][0]
Получить максимальный и минимальный
puts *hash[0], *hash[hash.length-1]
Вторая по величине пара значений ключа
Hash[*hash[1]]
Чтобы преобразовать массив хэшей в хэш
hash.to_h
Я сделал это сегодня по аналогичной проблеме и закончил с этим:
hash = { "CA"=>2, "MI"=>1, "NY"=>1 }
hash.invert.max&.last
=> "CA"
Для Ruby менее 2,3 вы можете заменить &.last
на .try(:last)
Любой из них является лишь защитой, если ваш хеш-источник пуст: {}
Это вернет последний ключ хеша, отсортированный по размеру; однако могут быть две клавиши с одинаковым значением.
def largest_hash_key(hash)
key = hash.sort{|a,b| a[1] <=> b[1]}.last
puts key
end
hash = { "n" => 100, "m" => 100, "y" => 300, "d" => 200, "a" => 0 }
largest_hash_key(hash)