Как добавить в массив с помощью метода if



У меня есть массив таких чисел...



a= [28, 67, 20, 38, 4, 39, 14, 84, 20, 64, 7, 24, 17, 8, 7, 6, 15, 52, 4, 26]


Мне нужно проверить, если каждое из чисел больше 30, и если да, то я хочу посчитать это число и получить подсчет, сколько чисел больше 30. У меня есть это, но это не работает до сих пор

def late_items
total_late = []
if a.map { |i| i > 30}
total_late << i
end
self.late_items = total_late.count
end
543   5  

5 ответов:

Методу count можно передать блок, чтобы указать, какие элементы следует считать. Элементы, для которых блок возвращает false или nil, игнорируются.

В вашем случае все сводится к следующему:

array.count { |element| element > 30 }

Вы можете использовать select, чтобы получить все элементы, превышающие 30.

a.select{|b| b > 30}.count
# => 6 

Гораздо проще в Ruby:

a = [28, 67, 20, 38, 4, 39, 14, 84, 20, 64, 7, 24, 17, 8, 7, 6, 15, 52, 4, 26]

a.select{ |e| e > 30 }

Похоже, что вы также хотите индекс каждого элемента, который превышает 30, если это так, это будет работать:

a= [28, 67, 20, 38, 4, 39, 14, 84, 20, 64, 7, 24, 17, 8, 7, 6, 15, 52, 4, 26]
count = 0
pos = []
a.each_with_index do |num, i|
    if num > 30
        count += 1
        pos << i
    end
end

puts count
print pos

#=> 6 [1,3,5,7,8,17]

Вы также можете проверить метод inject. Внутри него вы легко можете получить сумму чисел больше 30:

a.inject(0) { |sum, n| n > 30 ? sum += n : sum }

Или, если у вас есть массив чисел больше 30, вы можете использовать reduce для суммирования его элементов. В пределах вашей переменной a она будет выглядеть следующим образом:

a.select{ |n| n > 30 }.reduce(&:+)

Comments

    Ничего не найдено.