Mas Bagol
Mas Bagol

Reputation: 4627

Converting numbers from regex to integer in Ruby

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

Answers (1)

Roman Kiselenko
Roman Kiselenko

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

Related Questions