Я хочу использовать для каждого и счетчик:
i=0
for blah in blahs
puts i.to_s + " " + blah
i+=1
end
Есть ли лучший способ сделать это?
Примечание: я не знаю blahs
, массив это или хеш, но необходимость сделать blahs[i]
это не сделает его более сексуальным. Также я хотел бы знать, как писать i++
на Ruby.
Технически, ответ Мэтта и Сквиги пришел первым, но я даю наилучший ответ на парадоджу, поэтому немного расскажу о SO. Также в его ответе была записка о версиях, которая по-прежнему актуальна (пока моя Ubuntu 8.04 использует Ruby 1.8.6).
Надо было использовать puts "#{i} #{blah}"
что-то более лаконичное.
Ответы:
Как уже говорили люди, вы можете использовать
но если вам нужны индексы с итератором, отличным от «каждого» (например, если вы хотите отобразить с помощью индекса или чего-то подобного), вы можете объединить перечислители с помощью метода each_with_index или просто использовать with_index:
Это то, что вы можете сделать из ruby 1.8.7 и 1.9.
источник
Вы не можете сделать это с помощью. Я обычно люблю более декларативный звонок каждому лично в любом случае. Отчасти потому, что легко переходить в другие формы, когда вы достигаете предела синтаксиса for.
источник
Да, это
collection.each
делать циклы, а затемeach_with_index
получать индекс.Вы, вероятно, должны прочитать книгу по Ruby, потому что это фундаментальный Ruby, и если вы его не знаете, у вас будут большие проблемы (попробуйте: http://poignantguide.net/ruby/ ).
Взято из исходного кода Ruby:
источник
Если у вас нет новой версии
each_with_index
, вы можете использоватьzip
метод для сопряжения индексов с элементами:который производит:
источник
'%s %s' % [1, "two"]
в документации по Ruby? Спасибо за вашу помощь и за сохранение вертикального пространства, используя одну строку для архивирования и картирования.Что касается вашего вопроса о том, что делать
i++
, ну, вы не можете сделать это в Ruby. Вашеi += 1
заявление именно так и должно быть.источник
Перечисляя перечислимы серии очень приятно.
источник
Если
blahs
это класс, который смешивается в Enumerable, вы должны быть в состоянии сделать это:источник
Если вы хотите получить индекс ruby для каждого, то вы можете использовать
Вот пример, чтобы показать, как
.each_with_index
работает:Это напечатает:
источник