Ruby как l oop два объекта одновременно - PullRequest
0 голосов
/ 20 июня 2020

Пока я пишу @ 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>

Ответы [ 2 ]

1 голос
/ 20 июня 2020

Вы можете использовать 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 %>
1 голос
/ 20 июня 2020

Предположим, вы хотите иметь список песен для каждого исполнителя:

Если исполнитель указан в объекте песни.

Вы можете создать хэш-карту списков песен. Так что вам нужны только одни песни l oop.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...