40460


### pythonのfor文

[code]

    ary = ["taguti","fkoji"]
    for i in range(len(ary)):
        print(i)
    
[/code]

### rubyの場合はeach_index

[code]

    ary = ["taguti","fkoji"]
    ary.each_index{|i| p i}
    
[/code]

### rubyのfor文にそのような機能はあるのでしょうか？

[code]

    for i in ary.length
      p i# --- NG
    
[/code]


CC BY-SA 3.0
2017-12-21T14:22:41.110
40453
2017-12-21T15:43:49.557
26076
question
ruby
rubyのfor文にはeach_index的なものはないのでしょうか？


OTL よくよく考えたら普通にできました。

### 回答

[code]

    ary = ["taguti", "fkoji"]
    for i in 0..ary.length do
      p i
    end
    
[/code]


CC BY-SA 3.0
2017-12-21T14:27:23.980
40454
2017-12-21T14:27:23.980
2020-06-17T08:14:45.997
-1
26076
40453
answer


ちょっと違うかもですが、 添字つき each を行いたい場合は、 each_with_index を使うのが、一般的かなと思います。

[code]

    [3,2,1].each_with_index do |e,i|
      puts "#{i}: #{e}"
    end
    0: 3
    1: 2
    2: 1
    => [3, 2, 1]
    
[/code]


CC BY-SA 3.0
2017-12-21T14:42:48.530
40456
2017-12-21T14:42:48.530
754
40453
answer


Rubyの場合はfor式をほとんど使いません

  * スコープの扱いが特殊で変なバグを産みかねない
  * forがeachを使って実装されてるので単純に遅い

[each_index](https://docs.ruby-
lang.org/ja/latest/method/Array/i/each_index.html)でいいのではないでしょうか

[code]

    ary = %w[taguti fkoji]
    ary.each_index{|i| p i}
    
[/code]


CC BY-SA 3.0
2017-12-21T15:43:49.557
40460
2017-12-21T15:43:49.557
26230
40453
answer