ruby:ハッシュ操作の基本

ハッシュの基本操作。

>> seeds = {"unk"=>0, "par"=>3, "rog"=>1}
=> {"unk"=>0, "par"=>3, "rog"=>1}
>> seeds["par"]
=> 3

>> seeds_s = {unk: 0, par: 3, rog: 1}                                                                           
=> {:unk=>0, :par=>3, :rog=>1}
>> seeds_s[:par]
=> 3

>> a = seeds_s.fetch(:par)
=> 3
>> a = seeds_s.fetch(:zwo)                                                                                      
Traceback (most recent call last):
        1: from (irb):83:in `fetch`
KeyError (key not found: :zwo)
# 存在しないキー指定するとエラー

>> seeds_s.store(:zwo, 2)                                                                                       
=> 2
>> seeds_s
=> {:unk=>0, :par=>3, :rog=>1, :zwo=>2}
>> seeds_s.size
=> 4

# keyの存在判定
>> seeds_s.include?(:super)
=> false
>> seeds_s.include?(:zwo)
=> true

keyを変数から設定。

>> seeds_s = {unk: 0, par: 3, rog: 1}
=> {:unk=>0, :par=>3, :rog=>1}
>> a = "zog"
=> "zog"

>> seeds_s.store(a.to_s, 9)
=> 9
>> seeds_s
=> {:unk=>0, :par=>3, :rog=>1, "zog"=>9}

イテレータの操作。

# イテレータ(繰り返しメソッド)
>> seeds_s.each {|s| puts s}
unk
0
par
3
rog
1
zwo
2
=> {:unk=>0, :par=>3, :rog=>1, :zwo=>2}
>> seeds_s.each {|key,value| puts key.to_s + ":"+ value.to_s}                                                   
unk:0
par:3
rog:1
zwo:2
=> {:unk=>0, :par=>3, :rog=>1, :zwo=>2}
# each_key, each_valueでキーのみ、値のみの取得も可能

# 配列に変換
>> seeds_a = seeds_s.map {|k,v| [k,v]}
=> [[:unk, 0], [:par, 3], [:rog, 1], [:zwo, 2]]
>> seeds_a[0]
=> [:unk, 0]

>> seeds_a = seeds_s.map {|k,v| {k.to_sym=>v}}
=> [{:unk=>0}, {:par=>3}, {:rog=>1}, {:zwo=>2}]
>> seeds_a[0]
=> {:unk=>0}
>> seeds_a[0][:unk]
=> 0

その他。

# デフォルト指定(未登録キー指定時の返却)
>> z = Hash.new("default")
=> {}
>> z
=> {}
>> z[:key]
=> "default"