我想做一个方法来过滤包含正整数和字符串的数组,只留下整数,但奇怪的是我的代码不工作。过滤包含整数和字符串的数组
def filter_list(l)
l.map { |items| items.is_a?(Integer) ? items : l.delete(items) }
end
filter_list([1,2,'a','b'])
从理论上讲,我的代码工作,因为如果我更换items
和l.delete(items)
文字为“真”和“假”整型和字符串被替换正确返回
[true, true, false, false]
但是,保持items : l.delete(items)
它回报我
[1, 2, "a"] or sometimes [1, 2, "b"]
所以只有一个被删除。我怎样才能改变我的方法只返回整数?
为了在迭代它的同时安全地修改一个集合,你必须知道并理解确切的机制。为了简化这一点,Ruby提供了其中 - [Array#delete_if'](http://ruby-doc.org/core-2.4.1/Array.html#method-i-delete_if)和['Array#keep_if '](http://ruby-doc.org/core-2.4.1/Array.html#method-i-keep_if),所以你不必打扰。 – Stefan