ruby-LEDの日記

2006-06-13

ハッシュ

irb(main):001:0> instSection = {

irb(main):002:1* 'cello' => 'string',

irb(main):003:1* 'clarinet' => 'woodwind',

irb(main):004:1* 'drum' => 'percussion',

irb(main):005:1* 'oboe' => 'woodwing',

irb(main):006:1* 'trampet' => 'brass',

irb(main):007:1* 'violin' => 'string'

irb(main):008:1> }

=> {"trampet"=>"brass", "clarinet"=>"woodwind", "drum"=>"percussion", "cello"=>"string", "oboe"=>"woodwing", "violin"=>"string"}

irb(main):009:0> instSection['oboe']

=> "woodwing"

irb(main):010:0> instSection['cello']

=> "string"

irb(main):011:0> instSection['bassoon']

=> nil

    • 名前が指す(=>)のが中身です。
    • 中身が無ければ、nilを返します。
  • nil以外を返すようにも設定出来ます。

irb(main):001:0> histgram = Hash.new(0)

=> {}

irb(main):002:0> histgram['key1']

=> 0

irb(main):003:0> histgram['key1'] = histgram['key1'] + 1

=> 1

    • 普通に足し算できちゃう。
    • 配列ではどうなんでしょう?

irb(main):001:0> empty1 = Array.new(0)

=> []

irb(main):002:0> empty1[1]

=> nil

    • 常にnilが返ってきます。

irb(main):016:0> empty = Array.new(12)

=> [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]

irb(main):002:0> histgram = Hash.new("amrita")

=> {}

irb(main):003:0> histgram['key1']

=> "amrita"

irb(main):004:0> histgram['key1'] = histgram['key1'] + 1

TypeError: can't convert Fixnum into String

from (irb):4:in `+'

from (irb):4

from :0

irb(main):007:0> histgram['key1'] = histgram['key1'] + "12"

=> "amrita12"

irb(main):014:0> histgram['key1'] = histgram['key1'] + 12.to_s

=> "amrita1212"

    • 文字列に数字を直接足すことは出来ません。
    • 文字列同士は+で結合出来ます。
    • もしくは文字列に変換してから結合します。
  • 次は制御構造の予定
    • でもサンプルがそのままでは動きそうに無いので、どうしましょう?
トラックバック - http://rubyist.g.hatena.ne.jp/ruby-LED/20060613