我有一个数组:
arr2 = [6, '(7,0)', '(15,0)', '(5,0)', 3, '(15,2)', 17]
我想解析数组的每个元素并获取如下值:
arr2 = [6, 0, 0, 0, 3, 2, 17]
表示如果数组元素是(15,2)那么只有第二个元素即2应该在响应中打印出来,如果数组元素的格式不是像(7,0)那么它应该打印出来原样。
答案 0 :(得分:3)
[6, [7,0], [15,0], [5,0], 3, [15,2], 17].map { |e| [*e].last }
#⇒ [6, 0, 0, 0, 3, 2, 17]
如果元素是字符串:
%w[6, (7,0), (15,0), (5,0), 3, (15,2), 17].map { |e| e[/\d+(?=\)|,?\z)/] }
#⇒ ["6", "0", "0", "0", "3", "2", "17"]
map(&:to_i)
后者获取整数数组。
最后,对于最新版本:
[6, '(7,0)', '(15,0)', '(5,0)', 3, '(15,2)', 17].
map { |e| e.to_s[/\d+(?=\)|,?\z)/] }.
map(&:to_i)
#⇒ [6, 0, 0, 0, 3, 2, 17]
异国:
[6, '(7,0)', '(15,0)', '(5,0)', 3, '(15,2)', 17].
inspect.
scan(/\d+(?:,\d+)?/).
map { |e| e.split(',').last.to_i }
#⇒ [6, 0, 0, 0, 3, 2, 17]
答案 1 :(得分:3)
arr = [6, '(7,0)', '(15,0)', '(5,0)', 3, '(15,2)', 17]
arr.map do |obj|
case obj
when Integer
obj
else
obj[/(?<=,)\d+/].to_i
end
end
#=> [6, 0, 0, 0, 3, 2, 17]
答案 2 :(得分:3)
这对我来说似乎很好:
arr2.map{|x| x.to_s.scan(/\d+/).last.to_i }
如果你想要没有正则表达式的东西:
arr2.map do |item|
item.is_a?(Integer) ? item : item[1+item.rindex(',')..-2].to_i
end