Ваша проблема в том, что map!
передает только один аргумент в блок;следовательно, i
всегда nil
, i == 0
всегда терпит неудачу, а to_i
никогда не вызывается.Я думаю, вы хотите что-то более похожее на это:
list_of_items = File.open('line_counts.txt').collect do |line|
line.split(/\s+/).inject([ ]) { |a, e| a.push(a.length == 0 ? e.to_i : e) }
end
a.length == 0
по существу заменяет вашу ошибочную i == 0
проверку и преобразует первый компонент строки в целое число.
Если linecounts.txt
выглядит так:
1 one
2 two
Тогда list_of_items
в конечном итоге выглядит так:
[[1, "one"], [2, "two"]]
и это, похоже, то, что вы ищете.