Reputation: 4627
i want to convert numbers from regex to integer. I don’t know how to explain it clearly (my English is bad). So, I’ll go with an example:
regex = /data:\s*(\d+(?:\s*,\s*\d+)*)/i
string = "Data: 1, 2, 3, 4"
data = string.match(regex)
split_data = data[1].split(", ")
int_data1 = split_data.each {|i|i = i.to_i}
int_data2 = [1, 2, 3, 4]
p int_data1, int_data2
# int_data1 => ["1", "2", "3", "4"]
# int_data2 => [1, 2, 3, 4]
I expected int_data1 to return [1, 2, 3, 4], but it can't be converted to integer. So, it keeps return me ["1", "2", "3", "4"].
Is something I do wrong?
Upvotes: 0
Views: 150
Reputation: 44380
This:
int_data1 = split_data.each { |i| i = i.to_i }
Should be:
int_data1 = split_data.map { |i| i.to_i }
Or more short syntax:
int_data1 = split_data.map(&:to_i)
Read about difference between .each() and .map()
Upvotes: 1