Цикл над двумя объектами одновременно

#ruby-on-rails #ruby

#ruby-on-rails #ruby

Вопрос:

Я хочу создать таблицу следующим образом,

 <table>
<tr>
<th>Column1</th>
<th>Column2</th>
<th>Independent Column</th>
</tr>
<tr>
<td>a</td>
<td>1</td>
<td>i1</td>
</tr>
<tr>
<td>b</td>
<td>2</td>
<td>i2</td>
</tr>
<tr>
<td>c</td>
<td>3</td>
<td>i3</td>
</tr>
<tr>
<td></td>
<td></td>
<td>i4</td>
</tr>
<tr>
<td></td>
<td></td>
<td>i5</td>
</tr>


</table>
  

где столбцы 1 и 2 являются данными из переменной @a и Independent Column содержат данные из @b . Я хочу, чтобы они отображались в одной таблице, поэтому я не могу зацикливать их по отдельности как @a.each и @b.each .

Любая идея, чтобы помочь мне.

Комментарии:

1. Как @a и @b выглядят?

2. В чем разница между column 1 и Column1 ?

3. Вы пробовали объединить @a и @b ?

4. @a.zip(@b).each { |a, b| ... }

5. @ a и @ b имеют разный размер, это моя проблема

Ответ №1:

Вы можете выполнить итерацию над первым, отслеживая индекс, и получить значение из второго :

 @a.each_with_index do |a, index|
  @b[index] # may be nil
end
  

Однако это означает, что @b должен иметь [] оператор, который имеет место для любого массива, но может не иметь места для связанного списка, в зависимости от реализации.

Лучшим способом было бы объединить ваши коллекции ( @a и @b ) вместе, чтобы вы могли выполнять итерации только для одной коллекции и получать оба значения.

Ответ №2:

Вы можете использовать Array#zip :

 @a.zip(@b).each do |a, b|
end