首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby on rails如何在数组中查找与另一个数组中的项匹配的第一项

Ruby on rails如何在数组中查找与另一个数组中的项匹配的第一项
EN

Stack Overflow用户
提问于 2016-08-23 11:21:15
回答 4查看 364关注 0票数 1

我有一个排行榜数组,看起来像这样:

[{:member=>"1", :score=>7.0, :rank=>1}, {:member=>"5", :score=>6.0, :rank=>2}, {:member=>"4", :score=>5.0, :rank=>3}, {:member=>"3", :score=>4.0, :rank=>4}, {:member=>"2", :score=>3.0, :rank=>5}]

我还有一个活动用户ids数组[3,5]

如何获取排名最高的活跃用户的成员编号并将其分配给变量?排行榜数组将始终按秩排序。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-08-23 13:02:45

代码语言:javascript
复制
leaderboard = [{:member=>"1", :score=>7.0, :rank=>1},
               {:member=>"5", :score=>6.0, :rank=>2},
               {:member=>"4", :score=>5.0, :rank=>3},
               {:member=>"3", :score=>4.0, :rank=>4},
               {:member=>"2", :score=>3.0, :rank=>5}]

active_members = [3,5]

highest_ranked_active_member = leaderboard.
  select { |h| active_members.include? h[:member].to_i }.
  min_by { |h| h[:rank] }[:member]
  #=> "5"  
票数 1
EN

Stack Overflow用户

发布于 2016-08-23 11:32:16

一种方法是将数组减少到只有:member也在活动用户is数组中的条目,然后获取该数组的第一个元素:

代码语言:javascript
复制
leaderboard = [...]
active_user_ids = [3,5]

leaderboard.take_while{ |m| active_user_ids.include?(m[:member].to_i) }.first
票数 2
EN

Stack Overflow用户

发布于 2016-08-23 15:44:43

在这种情况下,我喜欢创建可重用的lambda,以便在查询数据时重用代码。

代码语言:javascript
复制
active_members = [3,5]
active_member  = -> member { active_members.include? member[:member].to_i }
member_score   = -> member { member[:score] }

leader_board = ...

# Find first active_member:
p leader_board.find(&active_member) #=> {:member=>"5", :score=>6.0, :rank=>2}
# Find active member with lowest and highest score:
p leader_board.select(&active_member).minmax_by(&member_score) #=> [{:member=>"3", :score=>4.0, :rank=>4}, {:member=>"5", :score=>6.0, :rank=>2}]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39091810

复制
相关文章

相似问题

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