我想做一個方法來過濾包含正整數和字符串的數組,只留下整數,但奇怪的是我的代碼不工作。過濾包含整數和字符串的數組
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