【问题标题】:Ruby how to loop the two objects at the same timeRuby如何同时循环两个对象
【发布时间】:2020-06-20 02:04:20
【问题描述】:

当我做@songs.each
我想同时做@artist.each。
这样我就可以列清单了。

<% @songs.each do |song|  %>
      <p class="list-group-item"><%= truncate(song.to_s, length: 10) %></p>
<% end %>

<% @artists.each do |artist| a%>
<p class="list-group-item"><%= truncate(aritst.to_s, length: 10) %></p>

【问题讨论】:

  • 两个列表的大小是否始终相同?
  • @spickermann 是的
  • “所以我可以列出清单” – 什么清单?您的预期结果是什么?

标签: html ruby-on-rails ruby loops


【解决方案1】:

您可以使用Array#zip 将两个数组组合成一个具有嵌套值的数组并遍历该列表:

<% @songs.zip(@artists).each do |(song, artist)|  %>
  <p class="list-group-item"><%= truncate(song.to_s, length: 10) %></p>
  <p class="list-group-item"><%= truncate(aritst.to_s, length: 10) %></p>
<% end %>

【讨论】:

    【解决方案2】:

    假设您想要为每个艺术家创建一个歌曲列表:

    如果歌手在歌曲对象中给出。

    您可以创建歌曲列表的哈希图。 所以你只需要一个歌曲循环。

    https://ruby-doc.org/core-2.7.1/Hash.html

    类似:

    songlists = {}
    songs.each do |song|
       unless songlists.has_key?(song.artist)
          songlists[song.artist] = []
       end
    
       songlists[song.artist].push(song)
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-20
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多