筛选包含整数和字符串的数组

Mar*_*ali 2 ruby arrays

我试图制作一种方法来过滤包含正整数和字符串的数组,而只留下整数,但是很奇怪,我的代码无法正常工作。

def filter_list(l)
 l.map { |items| items.is_a?(Integer) ? items : l.delete(items) }
end

filter_list([1,2,'a','b'])
Run Code Online (Sandbox Code Playgroud)

从理论上讲,我的代码行得通,因为如果我替换itemsl.delete(items)使用单词“ true”和“ false”替换整数和字符串,则返回正确

[true, true, false, false]
Run Code Online (Sandbox Code Playgroud)

但是,保持items : l.delete(items)它还给我

[1, 2, "a"] or sometimes [1, 2, "b"]
Run Code Online (Sandbox Code Playgroud)

因此只删除了一个。如何更改我的方法以仅返回整数?

spi*_*ann 5

您的代码无效,因为您l.delete在迭代同一数组时从数组中删除了元素。

想象一下,如果您遍历包含4个元素的数组,同时有人更改了数组中元素的数量及其位置。

我认为您正在寻找Array#select

array = [1, 2, 'a', 'b']
array.select { |element| element.is_a?(Integer) }
#=> [1, 2]
Run Code Online (Sandbox Code Playgroud)