这个特定练习是一个代码片Kata,它要求用户搜索一个数组,如果找到一个String,则跳到数组中的下一个项目。然后打印数组时不包含任何字符串。 [1, 2, "a", "b"]
是正在搜索的数组。我期待[1, 2]
。
我试过了:
def filter_list(l)
print l
i = 0
while i < l.length
l.each do|item| next if item.class == String
return item
i += 1
end
end
我还尝试了没有while循环的代码:
def filter_list(l)
print l
l.each do |item| next if item.class == String
return item
end
print l
end
两种方法都返回相同的结果:
1
我的代码只返回数组中的第一个元素。
任何指导都将不胜感激。
答案 0 :(得分:2)
如果您只想从阵列中删除每个字符串,可以使用#reject。
array = [1,2,"a","b"]
=> [1, 2, "a", "b"]
array.reject { |element| element.is_a? String }
=> [1, 2]
答案 1 :(得分:2)
[1, 2, "a", "b"].grep(Integer) # => [1, 2]
[1, 2, "a", "b"].grep_v(String) # => [1, 2]
答案 2 :(得分:0)
出于好奇:
arr = [1, 2, 2, "a", "b"]
(arr.map(&:to_s) - arr).map(&:to_i)
#⇒ [ 1, 2, 2 ]
zeroes = arr.count(0)
arr.map(&:to_i) - [0] + [0] * zeroes