鉴于x
:
x = ["stuff", "111", "other stuff", "more stuff"]
其中整数(在这种情况下为“111”)可以是任何正整数,如何将整数111
返回到变量并理想地将其从数组中删除?
答案 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)