首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在迭代数组时使用Array#delete?

如何在迭代数组时使用Array#delete?
EN

Stack Overflow用户
提问于 2010-07-16 06:51:43
回答 4查看 46.9K关注 0票数 74

我有一个数组,我想要迭代它并删除其中的一些元素。这不起作用:

代码语言:javascript
复制
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]。我怎么才能避免这个问题呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-16 06:55:44

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

请参见方法文档here

更新:

您可以在块中处理x:

代码语言:javascript
复制
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
票数 124
EN

Stack Overflow用户

发布于 2010-07-16 07:24:11

你不必从数组中删除,你可以这样过滤它:

代码语言:javascript
复制
a = [1, 2, 3, 4, 5]

b = a.select {|x| x < 3}

puts b.inspect # => [1,2]

b.each {|i| puts i} # do something to each here
票数 7
EN

Stack Overflow用户

发布于 2010-07-16 06:56:13

不久前我问过这个问题。

Deleting While Iterating in Ruby?

它不工作,因为当试图删除一些东西时,Ruby退出了.each循环。如果你只是想从数组中删除一些东西,delete_if可以工作,但如果你想要更多的控制,我在那个线程中的解决方案是有效的,尽管它有点丑陋。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3260686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档