我有一个像这样的代码块:
hash["value"].delete_if{|cell| cell["id"]["name"] == ('foo')}
有一种简单的方法可以计算delete_if实际执行的次数吗?
答案 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']`