将Ruby Hash转换为无重复的等级

[{: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,:created_at=>Fri,15 Nov 2019 02:19:45 UTC +00:00}]

对于Ruby中的上述列表,我具有以下列表ID的哈希值,投票数和created_at日期(表决数越大越好),我想对它们进行排名。换句话说,我想从某种函数中获得排名,然后通过listing.update_attribute(:rank,function-call)或类似的东西来更新列表中的排名。排名第一是最好的。如果存在具有相同投票数的列表,则其中一个应该获得排名,而另一个列表应该获得以下排名。 (比方说,决胜局是列表的created_at日期,首先创建列表的人排名更高。)

到目前为止,这是我所遇到的一切,我很困惑,可以真正使用一些帮助。

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
yc135 回答:将Ruby Hash转换为无重复的等级

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

arr.sort{|x,y| x[:vote_size] <=> y[:vote_size]}

这将为您提供一系列的投票大小。

,

您可以尝试执行此操作,这意味着如果vote_size有两个相等的值,我们将按{_1}}降序和created_at升序组合进行排序

vote_size
本文链接:https://www.f2er.com/3108970.html

大家都在问