Вычесть текущий элемент со следующим индексированным элементом - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь вычесть текущий элемент в цикле из следующего проиндексированного элемента, но я просто получаю следующую ошибку: неопределенный метод `[] 'для 0.0: Float

<% @trial.methods.each_with_index do |e, index| %>
  <%= (e.total - e.total[index+1]) %><br />
  <%= Time.at(e.try(:assessment).try(:assessment_date)/1000).strftime("%d/%m/%Y") %><br />
  <%= e.try(:assessment).try(:degrees) %>
<% end %>

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Вы можете использовать Enumerable # Reduce для достижения этой цели:

a =  [7,12,1,2,3]
a.reduce(&:-) # -11

Итак, для вашего случая:

@trial.methods.map{|e| e.total}.reduce(&:-)

См. https://ruby -doc.org / core-2.2.3 / Enumerable.html # method-i-redu * о его использовании

0 голосов
/ 29 августа 2018

Используйте # each_cons , чтобы построить подмассив последовательных пар, затем отобразите его:

array = [7,12,1,2,3]

array.each_cons(2).map{ |e| e.last - e.first }

# => [5, -11, 1, 1]

Небольшая альтернатива:

array.each_cons(2).map{ |a, b| b - a }

Конечно, вы можете изменить на a - b или что вам нужно.

Первая часть делает это:

array.each_cons(2).each {|e| p e}

# => [7, 12]
# => [12, 1]
# => [1, 2]
# => [2, 3]
0 голосов
/ 29 августа 2018

Я думаю, что есть более простой способ сделать это. Посмотрите на следующий пример.

# An array of 5 random numbers
a =  [7,12,1,2,3]

# Iterate through the indices of the array
a.each_index do |i|
    # We only show the result of a[i+1] - a[i]
    # given i+1 is still in range of the array
    puts "#{a[i+1] - a[i]}" if (i+1) < a.length
end

Это должно вывести 5 -11 1 1 каждый на новой строке.

Точно так же вы можете сделать что-то вроде этого:

<% @trial.methods.each_index do |i| %>
  <% if i + 1 < e.total.length %>
    <%= (e.total[i] - e.total[index+1]) %>
  <% else %>
    <%= 0 %>
  <% end %>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...