我有一個數組:如何通過RegExp從數組中提取整數值(混合類型:整數/字符串)?
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)那樣的格式,那麼它應該按原樣打印。
我有一個數組:如何通過RegExp從數組中提取整數值(混合類型:整數/字符串)?
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)那樣的格式,那麼它應該按原樣打印。
[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]
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]
這似乎沒什麼問題:
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
'arr2'是用Ruby無效的結構。 –
@ sagarpandya82,可以隱蔽這個數組轉換爲字符串類型,如下所示: ARR2 =%(重量)[6,(7,0),(15,0),(5,0),3,(15,2) ,] –
你已經被告知17已經是'[6,(7,0),(15,0),(5,0),3,(15,2),17]'是不是有效的Ruby對象你又來了。 Downvoted並投票結束。 – mudasobwa