2012-03-04 62 views
1

我在我的控制器下面的代码:无法转换第一个元素数组使用整数.to_i

@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"]] 

为什么它没有转换的第一要素每个子数组都是一个整数。请解释

+0

您的'holder.first.to_i'在这里没有什么意义。它只是创建你想要的整数,但没有分配给任何变量,并消失。 '持有人'保持完好。 – sawa 2012-03-04 17:14:33

回答

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 
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 
2

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

尝试holder = holder.first.to_i

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"]] 
相关问题