如何计算delete_if已经执行了多少次?

时间:2017-03-29 14:00:10

标签: ruby

我有一个像这样的代码块:

hash["value"].delete_if{|cell| cell["id"]["name"] == ('foo')}

有一种简单的方法可以计算delete_if实际执行的次数吗?

1 个答案:

答案 0 :(得分:4)

计数器

由于每个整数都是真的,你可以写:

count = 0
hash["value"].delete_if{|cell| cell["id"]["name"] == ('foo') && count += 1}
每次cell递增时,

count都会被删除,count每次cell["id"]["name"] == ('foo')都会递增。{/ p>

举个例子:

count = 0
true  && count += 1
false && count += 1
true  && count += 1
false && count += 1
true  && count += 1

count
# 3

由于delete_if具有破坏性,您可以简单地比较方法调用之前和之后的大小差异。

original_size = hash["value"].size
hash["value"].delete_if{|cell| cell["id"]["name"] == ('foo') && count += 1}
original_size - hash["value"].size

分区

如果您不仅需要delete_if采取行动的次数,而且还需要使用partition的哪些元素:

deleted, hash["value"] = hash["value"].partition{|cell| cell["id"]["name"] == ('foo')}
deleted.size
# deleted contains the deleted cells from `hash['value']`