开发者

Ruby Hash/Array delete_if without a block

开发者 https://www.devze.com 2023-03-09 03:32 出处:网络
According to Ruby H开发者_开发问答ash/Array documentation, the delete_if method returns an enumerator if no block is given.How is this useful? Can someone give an example to demonstrate this pattern?T

According to Ruby H开发者_开发问答ash/Array documentation, the delete_if method returns an enumerator if no block is given. How is this useful? Can someone give an example to demonstrate this pattern?


There are some methods defined on Enumerator that give flexibility to iterators. One such method I often use is with_index.

p %w[a b c d e f].delete_if.with_index{|_, i| i.even?}
# => ["b", "d", "f"]

If this was to be done without Enumerator class, all kinds of methods have to be defined, including delete_if_with_index, and that is not a good thing.


The enumerator will just allow you to run the block later. For example, if you had a method that specifically handled the delete if for several different objects, you could pass it the enumerator.

In the example below, it will print 1, 3, 5

arr = [0,1,2,3,4,5]
enumerator = arr.delete_if
enumerator.each { |el| el.even? }
puts arr.join(', ')
0

精彩评论

暂无评论...
验证码 换一张
取 消