首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Ruby哈希转换为无重复的排名

将Ruby哈希转换为无重复的排名
EN

Stack Overflow用户
提问于 2019-11-13 23:09:23
回答 2查看 79关注 0票数 1
代码语言:javascript
复制
[{:listing_id=>1, :vote_size=>1, :created_at=>Wed, 13 Nov 2019 02:19:45 UTC +00:00},
 {:listing_id=>2, :vote_size=>0, :created_at=>Thu, 14 Nov 2019 02:19:45 UTC +00:00},
 {:listing_id=>3, :vote_size=>0, :created_at=>Fri, 15 Nov 2019 02:19:45 UTC +00:00}]

我在Ruby中有下面的列表ID,投票数和created_at日期的哈希( vote_size越高越好),我想给他们排名。换句话说,我希望从某种函数中获得排名,然后通过listing.update_attribute(: rank,function-call)或类似的方法更新列表中的排名。排名1是最好的。如果有相同票数的列表,则只有一个列表应该获得排名,而另一个列表应该获得下面的排名。(假设决胜局是上市created_at日期,谁先创建了上市,谁就会获得更高的排名。)

这就是我到目前为止所拥有的,我被困住了,哈哈,真的需要一些帮助。

代码语言:javascript
复制
namespace :server do
  desc "update the listings rank"
  task update_listing_rank: :environment do
      listings = Listing.all
      all_listings_with_votes = total_votes_for_listing listings


      all_listings_with_votes.map{ |e|
          puts all_listings_with_votes.index(e) + 1
        }

  end

  def total_votes_for_listing listings
    listings.map do |listing|
      {listing_id: listing.id, vote_size: listing.votes.size, created_at: listing.created_at}
    end
  end


end
EN

回答 2

Stack Overflow用户

发布于 2019-11-13 23:19:35

这里有个很大的提示。把你的数组

代码语言:javascript
复制
arr.sort{|x,y| x[:vote_size] <=> y[:vote_size]}

这将为您提供一个经过排序的投票大小数组。

票数 2
EN

Stack Overflow用户

发布于 2019-11-14 00:59:25

您可以尝试这样做,也就是说,如果created_at有两个相等的值,则按created_at和vote_size的组合按降序和created_at升序排序

代码语言:javascript
复制
an_array.sort_by {|a| [-a[:vote_size] , a[:created_at]] }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58840033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档