LoginSignup
2
0

More than 5 years have passed since last update.

多重階層のハッシュをストレス無く作れるクラスを作ってみた

Last updated at Posted at 2018-03-09

{1=>{2=>{3=>"a"}}} みたいな多重階層ハッシュを簡単に扱えるようにHashをちょっと改良したクラスを作ってみました。

ruby

class MyHash < Hash
  def [](key)
    if has_key? key
      super
    else
      self[key] = self.class.new
    end
  end
end

ちょっと雑ですが、以下のようにさくっと動きます。

irb

my_hash = MyHash.new

my_hash[1][2][3] = "a"

puts my_hash
=> {1=>{2=>{3=>"a"}}}

ループするとこんな感じ


my_hash = MyHash.new

data = [
  [2018, 3, 20, "◯"],
  [2018, 3, 21, "☓"],
  [2018, 3, 22, "◯"],
  [2018, 4, 20, "◯"],
  [2018, 4, 21, "◯"],
  [2018, 4, 22, "☓"],
  [2019, 4, 20, "◯"],
  [2019, 4, 21, "◯"],
  [2019, 4, 22, "☓"],
].each do |(a,b,c,d)|
  my_hash[a][b][c] = d
end

puts my_hash
=> {2018=>{3=>{20=>"◯", 21=>"☓", 22=>"◯"}, 4=>{20=>"◯", 21=>"◯", 22=>"☓"}}, 2019=>{4=>{20=>"◯", 21=>"◯", 22=>"☓"}}}
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0