在数组中查找字符串并使用next

时间:2016-06-25 16:39:35

标签: arrays ruby

这个特定练习是一个代码片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

我的代码只返回数组中的第一个元素。

任何指导都将不胜感激。

3 个答案:

答案 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