はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
Dict (Python)
辞書の四則演算が必要らしいのですが、辞書を継承してメソッドを追加しているみたいです。
Hash (Ruby)
class H < Hash
def initialize
self.default = 0
end
def +(other)
case other
when Hash
other.each do |k, v|
self[k] += v
end
when Integer || Float
self.each do |k, _|
self[k] += other
end
end
end
def *(other)
case other
when Hash
other.each do |k, v|
self[k] *= v
end
when Integer || Float
self.each do |k, _|
self[k] *= other
end
end
end
end
h = H.new
h + {'A' => 1}
h + {'A' => 1, 'B' => 1}
p h # {"A"=>2, "B"=>1}
h + 3
p h # {"A"=>5, "B"=>4}
h * {'B' => 2, 'C' => 2}
p h # {"A"=>5, "B"=>8, "C"=>0}
h * 2
p h # {"A"=>10, "B"=>16, "C"=>0}
そられしくなりました。
本来であれば交換則で、例えば、Integer * Hash
も必要なのですが。
もしかしたら、gems
やnumpy/scipy
にあるかもしれませんね。
メモ
- Python の 辞書 の四則演算 を学習した
- 百里を行く者は九十里を半ばとす