首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails基于优先级对散列数组进行排序

Rails基于优先级对散列数组进行排序
EN

Stack Overflow用户
提问于 2022-05-06 12:17:30
回答 1查看 99关注 0票数 1

请帮助我根据优先级找到解决方案排序,我没有得到解决方案

基于以下方面的优先事项:

  • 第一截最早槽
  • 第二最高评级
  • 第3 cronofy_enabled
代码语言:javascript
复制
interview_proposal = [
  { interviewer_id: 3903, rating: 4, cronofy_enabled: false, slot_date: "2022-05-09" },
  { interviewer_id: 10, rating: 3.5, cronofy_enabled: false, slot_date: "2022-05-06" },
  { interviewer_id: 3902, rating: 2, cronofy_enabled: true, slot_date: "2022-05-06" },
{ interviewer_id: 3904, rating: 2.5, cronofy_enabled: false, slot_date: "2022-05-09" },
{ interviewer_id: 3905, rating: 3.5, cronofy_enabled: false, slot_date: "2022-05-09" }
]
    
# First priority picked earliest_slot
@earliest_slot = interview_proposal.find{|proposal| proposal[:slot_date] == "2022-05-06"}
#second priority rating
@max_rating = interview_proposal.max_by{|proposal| proposal[:rating]}
# Third priority cronofy_enabled
@calendar_synced = interview_proposal.find{|proposal| proposal[:cronofy_enabled]}
    
sorted_array = []
interview_proposal.each do |interview_proposal|
  priority = match_count
  sorted_array << { priority: priority, interview_proposal: interview_proposal }
end
sorted_array = sorted_array.
  sort_by { |obj| obj[:priority] }.
  reverse.map { |obj| obj[:interview_proposal] }
sorted_array
    
def match_count
  count = 0
  count += 1 if @earliest_slot[:slot_date].present?
  count += 1 if @max_rating[:rating].present?
  count += 1 if @calendar_synced[:cronofy_enabled]
  count
end
EN

回答 1

Stack Overflow用户

发布于 2022-05-06 13:10:53

在我看来,通过使用Ruby排序法,您可以减少代码中的开销。在每个块迭代中,只需提供一个正整数(如果a> b )、0(如果它们相等)和一个负整数(b >a )。对于前两种情况,星舰运算符<=>是一个很好的快捷方式,但对布尔函数不起作用,所以我们在这里添加了额外的逻辑。

代码语言:javascript
复制
sorted_array = interview_proposal.sort do |a, b|

   if  (a[:slot_date] <=> b[:slot_date]) != 0
      a[:slot_date] <=> b[:slot_date] 
   elsif (a[:rating] <=> b[:rating]) != 0
      a[:rating] <=> b[:rating]
   elsif a[:cronofy_enabled] == b[:cronofy_enabled]
       0
   elsif a[:cronofy_enabled]
       1
   else 
      -1
   end
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72141352

复制
相关文章

相似问题

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