2012-03-04 20 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

答えて

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整数として解析されたオブジェクトを返しますが、それはあなたのケースでは、あなたはおそらく

@raw_data.each do |data| 
    holder = data.split("/") 
    @data_set << holder.first.to_i 
end 
を読むためにあなたのコードを変更したいので、元のオブジェクトに

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 

は変更されません。

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"]] 
関連する問題