我有一个数组,我想迭代并删除一些元素.这不管用:

a = [1, 2, 3, 4, 5]
a.each do |x|
  next if x < 3
  a.delete x
  # do something with x
end
a #=> [1, 2, 4]

我希望a变成[1, 2].我怎样才能避开这件事?

推荐答案

a.delete_if { |x| x >= 3 }

参见方法文档here

更新:

可以在块中处理x:

a.delete_if do |element|
  if element >= 3
    do_something_with(element)
    true # Make sure the if statement returns true, so it gets marked for deletion
  end
end

Ruby相关问答推荐

ruby:比较两个单词并从中提取不常见的字母

Rubymine - 启用行号

each_with_object 应该如何工作?

在ruby中反转数组的顺序

方法如何在 Ruby 中使用哈希参数?

如果浮点组件不是 .00 sprintf/printf,则仅显示小数点

rbenv 没有显示可用的 ruby​​ 版本

如何正确截断表格?

Python 是否在 Ruby 中进行类似于字符串 #{var}的变量插值?

GET 和 POST 请求的相同 Rails 4 路由

我不明白Ruby本地范围(local scope)

array.include?多个值

什么是匹配不在行尾的字符串的正则表达式?

Ruby中的file.open、open和IO.foreach,有什么区别?

如何只获取没有命名空间的类名

在类方法中使用实例变量 - Ruby

Xcode - 配置:错误:在 $PATH 中找不到可接受的 C 编译器

向实例对象添加方法

Integer 和 Fixnum 有什么区别?

如何在 Ubuntu 12.04 上正确安装 ruby​​ 2.0.0?