【问题标题】:comparing index values in an array比较数组中的索引值
【发布时间】:2015-09-07 02:33:06
【问题描述】:

我有一个看起来像这样的数组

ranking_array = ['NC', '40', '30/5', '30/4', '30/3', '30/2', '30/1', '30', '15/5', '15/4', '15/3', '15/2', '15/1', '15', '5/6', '4/6', '3/6', '2/6', '1/6', '0', '-2/6', '-4/6', '-15', '-30']

我还有一个模型用户,我的用户有一个排名,它是包含在ranking_array 中的一个值。

我有一个带有 max_ranking 和 min_ranking 的模型锦标赛,这两个值都包含在ranking_array 中。

用户只能订阅锦标赛,如果

tournament.min_ranking<=user.ranking <= tournament.max_ranking

我需要一种方法来比较rankings的值(即ranking_array索引,因为ranking_array是从低到高排序的)

因此,我需要写一个比较这些值索引的方法:

if current_user.ranking_index > tournament.max_ranking_index
  flash[:alert] = "Vous n'avez pas le classement requis pour vous inscrire dans ce tournoi"
elsif current_user.ranking_index < tournament.min_ranking_index
  flash[:alert] = "Vous n'avez pas le classement requis pour vous inscrire dans ce tournoi"

如何使用 each_with_index 实现这一点?

【问题讨论】:

  • 目前还不清楚您要达到的目标。在这种情况下,您想如何使用 each_with_index?
  • 我有包含我所有排名的ranking_array。我的锦标赛对象有一个最小和最大排名。如果锦标赛.min_ranking

标签: ruby-on-rails ruby indexing each


【解决方案1】:

我想我理解您想要实现的目标:您希望确保玩家的排名介于最低和最高排名之间,但您只将每个模型中的排名存储为字符串。排名数组按升序排列,但我不确定#each_with_index 是否可行。另一个答案更干净。您还可以阅读有关 Rails 内置枚举类的信息,当新开发人员或外部开发人员正在阅读它时,它会使它更清晰、更容易理解。

您的问题是关于如何使用 each_with_index 执行此操作,因此您想要这样的东西。

ranking_array.each_with_index do |ranking, i|
  return i if ranking == current_user.ranking
end

此外,您的两个警报都在闪烁相同的消息。如果这是故意的而不是拼写错误,您可以像这样组合您的 if 语句:

if current_user.ranking_index > tournament.max_ranking_index || current_user.ranking_index < tournament.min_ranking_index
  flash[:alert] = "Vous n'avez pas le classement requis pour vous inscrire dans ce tournoi"
end

【讨论】:

  • 旁注: if a &gt; b || a &lt; c 将使用三等号 Range 运算符写入 unless (c..b) === a
  • 注意Range#===Range#include?相同,如果范围的元素是数字,则与Range#cover?相同。
【解决方案2】:

如果要获取排名的索引,只需在ranking_array上调用.index即可。

ranking_array.index(current_user.ranking)

【讨论】:

    猜你喜欢
    • 2022-09-30
    • 2015-01-12
    • 2020-04-10
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多