如何使用ruby将数字循环到变量中?

时间:2015-05-30 22:15:27

标签: ruby-on-rails ruby

我正在构建一个应用程序来比较两个足球运动员的梦幻足球比分。 NFL赛季为17周,因此比较中的每位球员都有17分。我设置它,以便每个分数是一个变量。

例如,运动员1的第1周得分是@a1w1。运动员2是@a2w1

我在表格中比较了这些统计数据,我希望较高的分数显示为绿色。我最初写的代码不是很干。

<table>
  <tr>
<% if @a1w1 != nil && @a2w1 != nil && @a1w1 > @a2w1 %>
  <% @a1w1green = "green".html_safe %>
<% else %>
  <% @a1w1green = nil %>
<% end %>

<% if @a1w1 != nil && @a2w1 != nil && @a1w1 < @a2w1 %>
  <% @a2w1green = "green".html_safe %>
<% else %>
  <% @a2w1green = nil %>
<% end %>
    <td class='matchup-stats <%= @a1w1green %>'><%= @a1w1 %></td>
    <td class='stat-week'>1</td>
    <td class='matchup-stats <%= @a2w1green %>'><%= @a2w1 %></td>
  </tr>
</table>

我将不得不重复这16次以填写所有17周。我有一个想法是创建一个循环来为我做这个,但我在修复语法时遇到了麻烦。

<table>
  <% 1.upto(17) do|week| %>
  <% @a1green = @a2green = nil %>
    <% if @a1w[week] > @a2w[week] %>
      <% @a1green = "green".html_safe %>
    <% elsif @a2w[week] > @a1w[week] %>
      <% @a2green = "green".html_safe %>
    <% end %>
    <tr>
      <td class='matchup-stats <%= @a1green %>'><%=  @a1w[week] %></td>
      <td class='stat-week'><%= week %></td>
      <td class='matchup-stats <%= @a2green %>'><%=  @a2w[week] %></td>
    </tr>
    <% end %>
</table>

我知道使用[]不正确,但我无法弄清楚写这个的正确方法。我是Ruby的新手,我已经在这里工作了好几个小时。有人可以借给我一些建议吗?

2 个答案:

答案 0 :(得分:1)

受到Exupery的回答的启发,我想出了一个解决方案。我已经在数组中获得了玩家分数:@a1vals@a2vals

<table>
<% 0.upto(16) do|week| %>
<% @a1green = @a2green = nil %>
  <% if @a1vals[week] != nil && @a2vals[week] != nil && @a1vals[week] > @a2vals[week] %>
    <% @a1green = "green".html_safe %>
  <% elsif @a1vals[week] != nil && @a2vals[week] != nil && @a1vals[week] < @a2vals[week] %>
    <% @a2green = "green".html_safe %>
  <% end %>
    <tr>
      <td class='matchup-stats <%= @a1green %>'><%= @a1vals[week] %></td>
      <td class='stat-week'><%= week %></td>
      <td class='matchup-stats <%= @a2green %>'><%= @a2vals[week] %></td>
    </tr>
    <% end %>
</table>

感谢您的帮助@Exupery!

答案 1 :(得分:0)

您可以使用hash而不是将每个分数存储为变量。你可以为每个玩家提供一个哈希并且每周都有一个密钥(然后你可以将这些玩家的集合存储为一个数组,以便于传递/迭代)。

例如:

@a1 = Hash.new
@a1[1] = 42
@a1[2] = 49

......等等(这只是一个简单的例子,有很多方法可以填充哈希的元素,如果你不熟悉我建议阅读ruby文档)。

然后你可以通过以下方式迭代玩家的周数:

1.upto(17) do |week|
  score = @a1[week]
  ## do whatever with score
end