Невозможно преобразовать первый элемент в массиве в целое число, используя .to_i - PullRequest
1 голос
/ 04 марта 2012

У меня в контроллере следующий код:

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

2 голосов
/ 04 марта 2012

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 голосов
/ 04 марта 2012

holder.first.to_i возвращает значение, приведенное к целому числу, но вы не переназначаете его.

Попробуйте holder = holder.first.to_i

1 голос
/ 04 марта 2012

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
1 голос
/ 04 марта 2012

Потому что 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...