首页 > 解决方案 > 数组过滤 Ruby

问题描述

一个问题要求打印数组中大于 100 的所有数字。当我运行此命令时:

array = [3, 123, 433, -77, 56, 200, 99, 101, 6]

index = 0
9.times do
  if array[index] > 100 == 0
    p array[index]
  end
  index = index + 1
end

数字 9 被打印出来。如果数字大于 100,我会输入适当的条件来获取打印机。任何人都可以帮忙吗?

标签: ruby

解决方案


如果您知道使用正确的工具,这个问题实际上很容易解决:

array = [3,123,433,-77,56,200,99,101,6]

array.select { |n| n > 100 }.each do |n|
  puts n
end

哪里select可以帮助缩小数字列表。Ruby 的 Array 类有大量像这样的方法,它们可以快速轻松地完成各种与过滤和映射相关的事情。

您的代码中的9.times部分与数组的实际长度是分离的,如果您添加/删除条目并且这两个条目不同步,这会导致很多错误。

尽可能使用数组迭代器,例如:

array = [3,123,433,-77,56,200,99,101,6]

array.each do |n|
  if (n > 100)
    puts n
  end
end

推荐阅读