# File lib/ramaze/snippets/ramaze/dictionary.rb, line 82 def []( *args ) hsh = new if Hash === args[0] hsh.replace(args[0]) elsif (args.size % 2) != 0 raise ArgumentError, "odd number of elements for Hash" else while !args.empty? hsh[args.shift] = args.shift end end hsh end
Alternate to new which creates a dictionary sorted by key.
d = Dictionary.alpha d["z"] = 1 d["y"] = 2 d["x"] = 3 d #=> {"x"=>3,"y"=>2,"z"=>2}
This is equivalent to:
Dictionary.new.order_by { |key,value| key }
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 114 def alpha( *args, &block ) new( *args, &block ).order_by_key end
Alternate to new which auto-creates sub-dictionaries as needed.
d = Dictionary.auto d["a"]["b"]["c"] = "abc" #=> { "a"=>{"b"=>{"c"=>"abc"}}}
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 123 def auto( *args ) #AutoDictionary.new(*args) leet = lambda { |hsh, key| hsh[key] = new( &leet ) } new(*args, &leet) end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 321 def <<(kv) push(*kv) end
def ==( hsh2 )
return false if @order != hsh2.order super hsh2
end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 202 def ==( hsh2 ) if hsh2.is_a?( Dictionary ) @order == hsh2.order && @hash == hsh2.instance_variable_get("@hash") else false end end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 211 def [] k @hash[ k ] end
Store operator.
h[key] = value
Or with additional index.
h[key,index] = value
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 227 def []=(k, i=nil, v=nil) if v insert(i,k,v) else store(k,i) end end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 245 def clear @order = [] @hash.clear end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 250 def delete( key ) @order.delete( key ) @hash.delete( key ) end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 271 def delete_if order.clone.each { |k| delete k if yield } self end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 356 def dup self.class[*to_a.flatten] end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 265 def each order.each { |k| yield( k,@hash[k] ) } self end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 255 def each_key order.each { |k| yield( k ) } self end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 260 def each_value order.each { |k| yield( @hash[k] ) } self end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 395 def empty? @hash.empty? end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 215 def fetch( k ) @hash.fetch( k ) end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 377 def find each{|k,v| return k, v if yield(k,v) } return nil end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 382 def first @hash[order.first] end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 235 def insert( i,k,v ) @order.insert( i,k ) @hash.store( k,v ) end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 350 def inspect ary = [] each {|k,v| ary << k.inspect + "=>" + v.inspect} '{' + ary.join(", ") + '}' end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 286 def invert hsh2 = self.class.new order.each { |k| hsh2[@hash[k]] = k } hsh2 end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 282 def keys order end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 386 def last @hash[order.last] end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 390 def length @order.length end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 367 def merge( hsh2 ) self.dup.update(hsh2) end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 136 def order reorder if @order_by @order end
Keep dictionary sorted by a specific sort order.
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 143 def order_by( &block ) @order_by = block order self end
Keep dictionary sorted by key.
d = Dictionary.new.order_by_key d["z"] = 1 d["y"] = 2 d["x"] = 3 d #=> {"x"=>3,"y"=>2,"z"=>2}
This is equivalent to:
Dictionary.new.order_by { |key,value| key }
The initializer Dictionary#alpha also provides this.
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 163 def order_by_key @order_by = lambda { |k,v| k } order self end
Keep dictionary sorted by value.
d = Dictionary.new.order_by_value d["z"] = 1 d["y"] = 2 d["x"] = 3 d #=> {"x"=>3,"y"=>2,"z"=>2}
This is equivalent to:
Dictionary.new.order_by { |key,value| value }
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 181 def order_by_value @order_by = lambda { |k,v| v } order self end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 335 def pop key = order.last key ? [key,delete(key)] : nil end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 325 def push( k,v ) unless @hash.include?( k ) @order.push( k ) @hash.store( k,v ) true else false end end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 292 def reject( &block ) self.dup.delete_if(&block) end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 296 def reject!( &block ) hsh2 = reject(&block) self == hsh2 ? nil : hsh2 end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 189 def reorder if @order_by assoc = @order.collect{ |k| [k,@hash[k]] }.sort_by( &@order_by ) @order = assoc.collect{ |k,v| k } end @order end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 301 def replace( hsh2 ) @order = hsh2.order @hash = hsh2.hash end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 371 def select ary = [] each { |k,v| ary << [k,v] if yield k,v } ary end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 306 def shift key = order.first key ? [key,delete(key)] : super end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 240 def store( a,b ) @order.push( a ) unless @hash.has_key?( a ) @hash.store( a,b ) end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 340 def to_a ary = [] each { |k,v| ary << [k,v] } ary end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 346 def to_s self.to_a.to_s end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 311 def unshift( k,v ) unless @hash.include?( k ) @order.unshift( k ) @hash.store( k,v ) true else false end end
# File lib/ramaze/snippets/ramaze/dictionary.rb, line 360 def update( hsh2 ) hsh2.each { |k,v| self[k] = v } reorder self end
Generated with the Darkfish Rdoc Generator 2.