如何打印出某个数字出现在数组中的次数

时间:2018-12-22 19:02:07

标签: ruby

我正在尝试获取55在数组中出现的次数。

我尝试使用一个条件声明如果数字为%×5,则打印2。这就是我所拥有的:

def virus(array)
  index = 0
  array.length.times do
    if array[index] % 5
      p 2
      break
    end
    index = index + 1
  end
end

p virus([11, 22, 33, 44, 55, 66, 77, 66, 55, 44])

我的输出应该是2,但是我得到2nil

3 个答案:

答案 0 :(得分:2)

这可能是您的代码的解决方法,因为您有p 2打印2而不是计数器:

def virus(array)
  index = 0
  count = 0
  array.length.times do
    if array[index]%5 == 0
      count +=1
    end
    index = index + 1
  end
  return count
end

如果元素可以被5整除(count),则需要添加一个if array[index]%5 == 0变量,或者可能需要检查元素是否等于55。

没有必要中断,或者您缺少一些要计数的元素。此外,break返回nil,这就是为什么将其打印出来的原因。

最后,您需要返回计数。

构建自定义循环是一种有用的学习方法,但是我也建议您看看https://ruby-doc.org/core-2.5.0/Enumerable.html#method-i-count,只是使用Ruby内置方法:

array = [11, 22, 33, 44, 55, 66, 77, 66, 55, 44]
array.count { |e| e % 5 == 0 } #=> 2

答案 1 :(得分:0)

[11, 22, 33, 44, 55, 66, 77, 66, 55, 44].count(55)
# => 2

答案 2 :(得分:-1)

代替p virus([11, 22, 33, 44, 55, 66, 77, 66, 55, 44]) 试试看:

def virus(array)
  index = 0
  array.length.times do
    if array[index] % 5
      puts 2
      break
    end
    index = index + 1
  end
end
puts virus([11, 22, 33, 44, 55, 66, 77, 66, 55, 44])

它将仅返回2 ...