[ruby] 루비 자동 카운터?

for-each와 카운터를 사용하고 싶습니다.

i=0
for blah in blahs
    puts i.to_s + " " + blah
    i+=1
end

더 좋은 방법이 있습니까?

참고 :blahs 배열인지 해시 인지 는 모르겠지만 blahs[i]더 해야하지는 않습니다. 또한 i++루비 로 쓰는 법을 알고 싶습니다 .


기술적으로 Matt와 Squeegy의 대답은 처음에 왔지만, 나는 paradoja에 대한 가장 좋은 대답을하고 있습니다. 또한 그의 대답에는 버전에 대한 메모가 있었으며 여전히 Ubuntu 8.04가 Ruby 1.8.6을 사용하는 한 관련이 있습니다.


puts "#{i} #{blah}"훨씬 간결한 것을 사용해야 합니다.



답변

사람들이 말했듯이 사용할 수 있습니다

each_with_index

그러나 “각”과 다른 반복자가있는 인덱스를 원할 경우 (예를 들어, 인덱스 또는 이와 유사한 것을 사용하여 매핑하려는 경우) each_with_index 메소드로 열거자를 연결하거나 with_index를 사용할 수 있습니다.

blahs.each_with_index.map { |blah, index| something(blah, index)}

blahs.map.with_index { |blah, index| something(blah, index) }

루비 1.8.7과 1.9에서 할 수있는 일입니다.


답변

[:a, :b, :c].each_with_index do |item, i|
  puts "index: #{i}, item: #{item}"
end

당신은 이것을 위해 이것을 할 수 없습니다. 나는 보통 어쨌든 각자에게보다 선언적인 부름을 좋아한다. for 구문의 한계에 도달하면 다른 양식으로 쉽게 전환 할 수 있기 때문입니다.


답변

예, collection.each루프를 수행 한 다음 each_with_index인덱스를 가져옵니다.

루비 책을 읽어야 할 것입니다. 루비 책은 근본적인 루비이므로 모르는 경우 큰 어려움에 처하게됩니다 ( http://poignantguide.net/ruby/ ).

Ruby 소스 코드에서 가져온 것 :

 hash = Hash.new
 %w(cat dog wombat).each_with_index {|item, index|
   hash[item] = index
 }
 hash   #=> {"cat"=>0, "wombat"=>2, "dog"=>1}


답변

의 새 버전이없는 경우이 메소드를 each_with_index사용하여 zip색인을 요소와 쌍을 지정할 수 있습니다 .

blahs = %w{one two three four five}
puts (1..blahs.length).zip(blahs).map{|pair|'%s %s' % pair}

어떤 생산 :

1 one
2 two
3 three
4 four
5 five


답변

에 대한 질문에 관해서 i++는 Ruby에서 그렇게 할 수 없습니다. i += 1당신이 한 문장은 당신이 그것을 할 거 야 정확한 방법이다.


답변

열거 열거 시리즈는 꽤 좋다.


답변

blahsEnumerable에서 혼합되는 클래스 인 경우 다음 을 수행 할 수 있어야합니다.

blahs.each_with_index do |blah, i|
  puts("#{i} #{blah}")
end