我试图制作一种方法来过滤包含正整数和字符串的数组,而只留下整数,但是很奇怪,我的代码无法正常工作。
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)
从理论上讲,我的代码行得通,因为如果我替换items并l.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)
因此只删除了一个。如何更改我的方法以仅返回整数?
您的代码无效,因为您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)
| 归档时间: |
|
| 查看次数: |
1162 次 |
| 最近记录: |