2016-08-05 5 views
2

まず、Google、StackOverflow、さらにはRuby Cookbookなどの書籍を検索したが、この単純な問題の解決策を見つけることができなかった:(私は「ラインカウンタ」と呼ぶ)の数は、各行の先頭になければならない。すなわちRubyのラインカウンタでハッシュコンテンツを印刷する

1- wood: any string 
2- palm: any other string 
3- pine: any thing 

myhash = Hash.new 0 

myhash["wood"] = "any string" 
myhash["palm"] = "any other string" 
myhash["pine"] = "any thing" 

myhash.each do |key, value| 
    puts "#{key}: #{value}" 
end 

私はこのような出力を持っているしたいと思います。私はそれを反復にどのように追加するのかわかりません、どうすればいいですか?注:これは、宝石を使用せずに行う必要があります。ありがとう。

答えて

4

これにはeach_with_indexを使用できます。しかし、キーと値を確実に括弧付きのグループに指定する必要があります。

myhash.each_with_index do |(key, value), index| # <-- Notice the group of (key, val) 
    puts "#{index} - #{key}: #{value}" 
end 

あなたはeach_with_index方法はブロックのみループに変数を生成かかるので、括弧内のキーと値があるグループに必要だ理由。通常はvalueおよびindexです。したがって、最初の要素(キーと値)を明示的に解体する必要があります。

は、コントラストについては、通常の配列は単に

array.each_with_index do |val, index| 
+0

ない大物が、補間に 'インデックス+ 1 'の方法を使用しますか? –

+1

'each_with_index'の代わりに' each.with_index(1) 'を使用すると、補間の追加を行う必要はありません。 –

+0

こんにちは、お返事ありがとうございました。しかし、私はなぜ(キー、値)が一緒にグループ化されているのか知りたいです。 Rubyのチュートリアルや書籍ではそのような特定の使用法は明白ではありませんが、私はそのような使い方を覚えていないと言います。ありがとう。 – Romario

関連する問題