我的控制器中有以下代码:
@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 :(得分: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