Eu quero usar um para cada e um contador:
i=0
for blah in blahs
puts i.to_s + " " + blah
i+=1
end
Há uma melhor forma de fazê-lo?
Nota: Não sei se blahs
é uma matriz ou um hash, mas fazer blahs[i]
isso não tornaria muito mais sexy. Também gostaria de saber como escrever i++
em Ruby.
Tecnicamente, a resposta de Matt e Squeegy veio em primeiro lugar, mas eu estou dando a melhor resposta para paradoja, então espalhe um pouco os pontos no SO. Também sua resposta teve a nota sobre as versões, que ainda são relevantes (desde que o meu Ubuntu 8.04 esteja usando o Ruby 1.8.6).
Deveria ter usado o puts "#{i} #{blah}"
que é muito mais sucinto.
Respostas:
Como as pessoas disseram, você pode usar
mas se você quiser índices com um iterador diferente de "each" (por exemplo, se desejar mapear com um índice ou algo parecido), concatenar enumeradores com o método each_with_index ou simplesmente usar with_index:
Isso é algo que você pode fazer a partir do ruby 1.8.7 e 1.9.
fonte
Você não pode fazer isso com for. Eu geralmente gosto da ligação mais declarativa para cada um pessoalmente. Em parte porque é fácil fazer a transição para outras formas quando você atinge o limite da sintaxe for.
fonte
Sim, é
collection.each
fazer loops eeach_with_index
obter o índice.Você provavelmente deveria ler um livro sobre Ruby, porque isso é fundamental para Ruby e, se você não o conhecer, estará com um grande problema (tente: http://poignantguide.net/ruby/ ).
Retirado do código fonte do Ruby:
fonte
Se você não possui a nova versão
each_with_index
, pode usar ozip
método para emparelhar índices com elementos:que produz:
fonte
'%s %s' % [1, "two"]
nos documentos do Ruby? Obrigado por sua ajuda e por conservar espaço vertical usando uma linha para compactar e mapear.Quanto à sua pergunta sobre fazer
i++
, bem, você não pode fazer isso em Ruby. Ai += 1
afirmação que você teve é exatamente como deveria fazê-lo.fonte
A série enumerável enumerável é bastante agradável.
fonte
Se
blahs
for uma classe que mescla em Enumerable, você poderá fazer isso:fonte
Se você deseja obter o índice de ruby para cada um, pode usar
Aqui está um exemplo para mostrar como
.each_with_index
funciona:Isso imprimirá:
fonte