无法使用.to_i将数组中的第一个元素转换为整数

时间:2012-03-04 14:27:14

标签: ruby-on-rails ruby

我的控制器中有以下代码:

@raw_data = ["124324/12", "345346/15"]
@data_set = []
@raw_data.each do |data| 
    holder = data.split("/")
    holder.first.to_i
    @data_set << holder
end

返回以下内容

[["124324", "12"], ["345346", "15"]]

为什么没有将每个子数组中的第一个元素转换为整数。请解释

4 个答案:

答案 0 :(得分:2)

holder.first.to_i将值转换为整数,但您不会重新分配它。

尝试holder = holder.first.to_i

答案 1 :(得分:2)

to_i创建另一个对象,然后插入旧对象。您可以使用map而无需变量赋值。

@raw_data = ["124324/12", "345346/15"]
@data_set = @raw_data.map do |data|
  d = data.split("/")
  [d[0].to_i, d[1]]
end

p @data_set
# [[124324, "12"], [345346, "15"]]

答案 2 :(得分:1)

因为to_i返回转换后的值。它没有进行到位转换。这意味着变量的值不会改变。

@raw_data = ["124324/12", "345346/15"]
@data_set = []
@raw_data.each do |data| 
    holder = data.split("/")
    holder[0] = holder.first.to_i
    @data_set << holder
end

答案 3 :(得分:1)

to_i返回解析为整数的对象,但不会更改原始对象

x = "123"
p x # "123"

y = x.to_i
p x # "123"
x.is_a? String # true
p y # 123
y.is_a? Integer # true

因此,在您的情况下,您可能希望将代码更改为

@raw_data.each do |data| 
  holder = data.split("/")
  @data_set << holder.first.to_i
end