如何遍历混合类型数组并返回第一个整数

时间:2015-05-21 19:33:55

标签: ruby

鉴于x

x = ["stuff", "111", "other stuff", "more stuff"]

其中整数(在这种情况下为“111”)可以是任何正整数,如何将整数111返回到变量并理想地将其从数组中删除?

5 个答案:

答案 0 :(得分:3)

您可以使用Enumerable#find

x.find {|s| s =~ /^\d+$/}
# => "111"

答案 1 :(得分:2)

可能有点不同:

x = ["stuff", "111", "other stuff",  "more stuff"]

found = x.select { |item| item == item.to_i.to_s } # (1)
p found
# => ["111"]

x -= found (2)
p x
# => ["stuff", "other stuff",  "more stuff"]

(1)我们选择了所有项目,我们尝试将其转换为Integer,然后再将Integer转换为字符串,以便我们可以比较值是一样的。

"111".to_i
# => 111

"hello".to_i
# => 0

因此对于非整数字符串,这总是错误的。

获得found项后,您可以x将其从x -= found移除。

答案 2 :(得分:2)

x.detect { |n| n =~ /^[0-9]+$/ }

答案 3 :(得分:1)

我认为你想要找到字符串数字,而不是整数,所以你必须测试一个所有数字的字符串。

found = nil

for elem in x do
  if elem =~ /^[0-9]+$/
    found = elem
    break
  end
end

found

答案 4 :(得分:1)

这是一个正整数吗?或所有正整数?想要删除负整数?如果这不是您想要的,将更新答案。

以下是我提出的建议:

x = ["stuff", "111", "other stuff",  "more stuff", "-12"]
int = x.grep(/^\d+$/).shift.to_s.to_i
i = x.index("#{int}")
x.delete_at(i)