简体   繁体   English

在红宝石中分类哈希的最有效方法是什么?

[英]What is the most efficient way to sort hashes in ruby?

I am trying to sort about 20 hashes in ruby based on one of the attributes of the array. 我正在尝试根据数组的属性之一对红宝石中的20种哈希进行排序。 I want to only return the top 3 hash keys , but I don't want to have to compare each one. 我只想返回前3个散列键 ,但是我不想比较每个散列键

Here is an example below of something similar to what I am trying to sort. 这是下面的示例,类似于我要排序的内容。 I want to sort based on powerrank. 我想根据powerrank排序。

["green", {:price=>24.88, :numreviews=>822, :avgStarsRank=>41.0, :reviewsrank=>28, :powerrank=>73.976}]

["steve", {:price=>14.96, :numreviews=>3, :avgStarsRank=>40.0, :reviewsrank=>0, :powerrank=>42.992000000000004}]

["joey", {:price=>40.27, :numreviews=>814, :avgStarsRank=>44.0, :reviewsrank=>28, :powerrank=>80.054}]

["board", {:price=>14.96, :numreviews=>3, :avgStarsRank=>40.0, :reviewsrank=>0, :powerrank=>47}]

["john", {:price=>40.27, :numreviews=>814, :avgStarsRank=>44.0, :reviewsrank=>28, :powerrank=>16}]

For this, all I would want back would an array with ["joey", "green", "board"]. 为此,我只想返回一个带有[“ joey”,“ green”,“ board”]的数组。 Any suggestions on how to tackle this issue? 关于如何解决这个问题有什么建议吗?

Edit: Here is the example in the original hash form: 编辑:这是原始哈希形式的示例:

powerrankings =
    {
        "green"=>{:price=>24.88, :numreviews=>822, :avgStarsRank=>41.0, :reviewsrank=>28, :powerrank=>73.976}, 
        "steve"=>{:price=>14.96, :numreviews=>3, :avgStarsRank=>40.0, :reviewsrank=>0, :powerrank=>42.992000000000004}, 
        "joey"=>{:price=>40.27, :numreviews=>814, :avgStarsRank=>44.0, :reviewsrank=>28, :powerrank=>80.054}}
        "board"=>{:price=>14.96, :numreviews=>3, :avgStarsRank=>40.0, :reviewsrank=>0, :powerrank=>47}, 
        "john"=>{:price=>40.27, :numreviews=>814, :avgStarsRank=>44.0, :reviewsrank=>28, :powerrank=>16}
    }

Assuming that powerrankings is not as you showed but is rather, 假设powerrankings不是您显示的那样,而是

powerrankings = {
  "green" => {:price=>24.88, :numreviews=>822, :avgStarsRank=>41.0, :reviewsrank=>28, :powerrank=>73.976}, 
  "steve" => {:price=>14.96, :numreviews=>3, :avgStarsRank=>40.0, :reviewsrank=>0, :powerrank=>42.992000000000004}, 
  "joey" => {:price=>40.27, :numreviews=>814, :avgStarsRank=>44.0, :reviewsrank=>28, :powerrank=>80.054},
  "board" => {:price=>14.96, :numreviews=>3, :avgStarsRank=>40.0, :reviewsrank=>0, :powerrank=>47}, 
  "john" => {:price=>40.27, :numreviews=>814, :avgStarsRank=>44.0, :reviewsrank=>28, :powerrank=>16}
}

then, 然后,

powerrankings.sort_by{|_, h| h[:powerrank]}.reverse.first(3).map(&:first)
# => ["joey", "green", "board"]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 基于Ruby on Rails中定义的数组的按字符串排序的最有效方法 - Most Efficient Way to Sort By String, Based on Defined Array in Ruby on Rails 根据Ruby中唯一的哈希键比较带有散列的数组的最有效方法 - Most efficient way of comparing arrays with hashes inside them based on a unique hash key in Ruby Ruby:修改哈希数组的最惯用方式? - Ruby: Most idiomatic way to modify an array of hashes? 在Ruby中从多维数组检索元素的最有效方法是什么? - What is the most efficient way to retrieve an element from a multidimensional array in Ruby? 在Ruby中深度复制对象的最有效方法是什么? - What's the most efficient way to deep copy an object in Ruby? 最有效的红宝石方法来转换此数组? - most efficient ruby way to transform this array? 将外部数据(tsv或json)提供给Ruby on Rails的最有效方法是什么? - What's the most efficient way to serve external data (tsv or json) to Ruby on Rails? 在Ruby on Rails 3中将Dropbox文件列表与表内容进行比较的最快,最有效的方法是什么? - What's the fastest most efficient way to compare a dropbox filelist to the contents of a table in Ruby on Rails 3? 存储和访问图像的最有效方法是什么 - What is the most efficient way to store and access images Rails:最有效的会话存储方式是什么? - rails: what is the most efficient way to store sessions?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM