2007-05-13(日)
擬似ハッシュ
30分プログラム、その26。そろそろ初めてから一ヶ月になるのか。
今回は、Perlで実験的に取り入れられている疑似ハッシュ(Pseudo Hash)のRubyによる実装。
疑似ハッシュは、
{:age=>47,:eyes=>'brown',:weight=>60}
のようなハッシュを、
[{:age=>1,:eyes=>2,:weight=>3}, 47,'brown',60]
irb> phash = PHash.new(:age=>47,:eyes=>'brown',:weight=>186) irb> phash[:age] 47 irb> phash.key? :age true irb> phash[:age] = 12 12
require 'forwardable' class PHash include Enumerable extend Forwardable def_delegators :@key,:key?,:has_key?,:member?,:include? def_delegator :@value,:include?,:value? def initialize(hash) @value = hash.values @key = Hash[*hash.keys.zip((0..hash.size).to_a).flatten] end def each @key.each{|key,index| yield key,@value[index] } end def [](key) @value[@key[key]] end def []=(key,value) @key[key] = @key.size unless key? key @value[@key[key]] = value end def clear @key.clear @value.clear self end end
コメントを書く
selvaggio
2007/05/13 22:25
個人的には、適当にいじって分からなくなってもキャンセルで元に戻せる、っていうのはありがたい機能だと思う。
mzp
2007/05/13 22:46
設定を変えるとすぐに反映されるからどういう効果がでるのかすぐわかる、っていうのもなかなか便利ですよ。
dmp
2007/05/13 23:25
間を取って、変更は即座に反映、「前回の変更を元に戻す」ボタンを追加、ということで。
トラックバック - http://d.hatena.ne.jp/mzp/20070513/phash
リンク元
- 7 http://www.google.co.jp/search?q=疑似ハッシュ(&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox
- 7 http://www.google.co.jp/search?q=perl+擬似ハッシュ&hl=ja
- 6 http://www.google.co.jp/search?q=擬似ハッシュ&hl=ja&lr=&rlz=1T4GZEZ_jaJP257JP257
- 6 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=mzp&num=50
- 5 http://mzp.sakura.ne.jp/wiki/
- 5 https://www.google.co.jp/
- 3 http://72.14.235.104/search?q=cache:YLKIPeQKVLsJ:d.hatena.ne.jp/mzp/20070513/phash+擬似ハッシュ&hl=ja&ct=clnk&cd=3&gl=jp&lr=lang_ja&client=firefox
- 3 http://a.hatena.ne.jp/selvaggio/
- 3 http://d.hatena.ne.jp/keyworddiary/Ruby?date=20070513
- 3 http://reader.livedoor.com/reader/