Class: Hash
- Includes:
- Enumerable
- Defined in:
- ext/enterprise_script_service/mruby/mrblib/hash.rb,
ext/enterprise_script_service/mruby/mrblib/hash.rb,
ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb
Overview
Hash is enumerable
ISO 15.2.13.3
Constant Summary
Constants included from Enumerable
Class Method Summary collapse
-
.[](*object) ⇒ Object
call-seq: Hash[ key, value, … ] -> new_hash Hash[ [ [key, value], … ] ] -> new_hash Hash[ object ] -> new_hash.
Instance Method Summary collapse
-
#<(hash) ⇒ Object
call-seq: hash < other -> true or false.
-
#<=(hash) ⇒ Object
call-seq: hash <= other -> true or false.
-
#==(hash) ⇒ Object
Equality—Two hashes are equal if they each contain the same number of keys and if each key-value pair is equal to (according to
Object#==
) the corresponding elements in the other hash. -
#>(hash) ⇒ Object
call-seq: hash > other -> true or false.
-
#>=(hash) ⇒ Object
call-seq: hash >= other -> true or false.
-
#_inspect(recur_list) ⇒ Object
internal method for Hash inspection.
-
#compact ⇒ Object
call-seq: hsh.compact -> new_hsh.
-
#compact! ⇒ Object
call-seq: hsh.compact! -> hsh.
-
#delete(key, &block) ⇒ Object
Delete the element with the key
key
. -
#delete_if(&block) ⇒ Object
call-seq: hsh.delete_if {| key, value | block } -> hsh hsh.delete_if -> an_enumerator.
-
#dig(idx, *args) ⇒ Object
call-seq: hsh.dig(key,…) -> object.
-
#each(&block) ⇒ Object
(also: #each_pair)
Calls the given block for each element of
self
and pass the key and value of each element. -
#each_key(&block) ⇒ Object
Calls the given block for each element of
self
and pass the key of each element. -
#each_value(&block) ⇒ Object
Calls the given block for each element of
self
and pass the value of each element. -
#eql?(hash) ⇒ Boolean
Returns
true
if hash and other are both hashes with the same content compared by eql?. -
#fetch(key, none = NONE, &block) ⇒ Object
call-seq: hsh.fetch(key [, default] ) -> obj hsh.fetch(key) {| key | block } -> obj.
-
#fetch_values(*keys, &block) ⇒ Object
call-seq: hsh.fetch_values(key, …) -> array hsh.fetch_values(key, …) { |key| block } -> array.
-
#flatten(level = 1) ⇒ Object
call-seq: hash.flatten -> an_array hash.flatten(level) -> an_array.
-
#inspect ⇒ Object
(also: #to_s)
ISO 15.2.13.4.30 (x).
-
#invert ⇒ Object
call-seq: hsh.invert -> new_hash.
-
#keep_if(&block) ⇒ Object
call-seq: hsh.keep_if {| key, value | block } -> hsh hsh.keep_if -> an_enumerator.
-
#key(val) ⇒ Object
call-seq: hsh.key(value) -> key.
-
#merge(other, &block) ⇒ Object
Return a hash which contains the content of
self
andother
. -
#merge!(other, &block) ⇒ Object
(also: #update)
call-seq: hsh.merge!(other_hash) -> hsh hsh.merge!(other_hash){|key, oldval, newval| block} -> hsh.
-
#reject(&block) ⇒ Object
call-seq: hsh.reject {|key, value| block} -> a_hash hsh.reject -> an_enumerator.
-
#reject!(&block) ⇒ Object
call-seq: hsh.reject! {| key, value | block } -> hsh or nil hsh.reject! -> an_enumerator.
-
#replace(hash) ⇒ Object
(also: #initialize_copy)
Replaces the contents of hsh with the contents of other hash.
-
#select(&block) ⇒ Object
(also: #filter)
call-seq: hsh.select {|key, value| block} -> a_hash hsh.select -> an_enumerator.
-
#select!(&block) ⇒ Object
(also: #filter!)
call-seq: hsh.select! {| key, value | block } -> hsh or nil hsh.select! -> an_enumerator.
-
#to_h ⇒ Object
call-seq: hsh.to_h -> hsh or new_hash.
- #to_proc ⇒ Object
-
#transform_keys(&block) ⇒ Object
call-seq: hsh.transform_keys {|key| block } -> new_hash hsh.transform_keys -> an_enumerator.
-
#transform_keys!(&block) ⇒ Object
call-seq: hsh.transform_keys! {|key| block } -> hsh hsh.transform_keys! -> an_enumerator.
-
#transform_values(&b) ⇒ Object
call-seq: hsh.transform_values {|value| block } -> new_hash hsh.transform_values -> an_enumerator.
-
#transform_values!(&b) ⇒ Object
call-seq: hsh.transform_values! {|key| block } -> hsh hsh.transform_values! -> an_enumerator.
Methods included from Enumerable
#all?, #any?, #chain, #collect, #count, #cycle, #detect, #drop, #drop_while, #each_cons, #each_slice, #each_with_index, #each_with_object, #entries, #filter_map, #find_all, #find_index, #first, #flat_map, #grep, #group_by, #hash, #include?, #inject, #lazy, #max, #max_by, #min, #min_by, #minmax, #minmax_by, #none?, #one?, #partition, #reverse_each, #sort, #sort_by, #take, #take_while, #tally, #uniq, #zip
Class Method Details
.[](*object) ⇒ Object
call-seq:
Hash[ key, value, ... ] -> new_hash
Hash[ [ [key, value], ... ] ] -> new_hash
Hash[ object ] -> new_hash
Creates a new hash populated with the given objects.
Similar to the literal ‘{ key => value, … }`. In the first form, keys and values occur in pairs, so there must be an even number of arguments.
The second and third form take a single argument which is either an array of key-value pairs or an object convertible to a hash.
Hash["a", 100, "b", 200] #=> {"a"=>100, "b"=>200}
Hash[ [ ["a", 100], ["b", 200] ] ] #=> {"a"=>100, "b"=>200}
Hash["a" => 100, "b" => 200] #=> {"a"=>100, "b"=>200}
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 26 def self.[](*object) length = object.length if length == 1 o = object[0] if Hash === o h = self.new o.each { |k, v| h[k] = v } return h elsif o.respond_to?(:to_a) h = self.new o.to_a.each do |i| raise ArgumentError, "wrong element type #{i.class} (expected array)" unless i.respond_to?(:to_a) k, v = nil case i.size when 2 k = i[0] v = i[1] when 1 k = i[0] else raise ArgumentError, "invalid number of elements (#{i.size} for 1..2)" end h[k] = v end return h end end unless length % 2 == 0 raise ArgumentError, 'odd number of arguments for Hash' end h = self.new 0.step(length - 2, 2) do |i| h[object[i]] = object[i + 1] end h end |
Instance Method Details
#<(hash) ⇒ Object
call-seq:
hash < other -> true or false
Returns <code>true</code> if <i>hash</i> is subset of
<i>other</i>.
h1 = {a:1, b:2}
h2 = {a:1, b:2, c:3}
h1 < h2 #=> true
h2 < h1 #=> false
h1 < h1 #=> false
312 313 314 315 316 317 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 312 def <(hash) raise TypeError, "can't convert #{hash.class} to Hash" unless Hash === hash size < hash.size and all? {|key, val| hash.key?(key) and hash[key] == val } end |
#<=(hash) ⇒ Object
call-seq:
hash <= other -> true or false
Returns <code>true</code> if <i>hash</i> is subset of
<i>other</i> or equals to <i>other</i>.
h1 = {a:1, b:2}
h2 = {a:1, b:2, c:3}
h1 <= h2 #=> true
h2 <= h1 #=> false
h1 <= h1 #=> true
332 333 334 335 336 337 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 332 def <=(hash) raise TypeError, "can't convert #{hash.class} to Hash" unless Hash === hash size <= hash.size and all? {|key, val| hash.key?(key) and hash[key] == val } end |
#==(hash) ⇒ Object
Equality—Two hashes are equal if they each contain the same number
of keys and if each key-value pair is equal to (according to
<code>Object#==</code>) the corresponding elements in the other
hash.
ISO 15.2.13.4.1
13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 13 def ==(hash) return true if self.equal?(hash) unless Hash === hash return false end return false if self.size != hash.size self.each do |k,v| return false unless hash.key?(k) return false unless self[k] == hash[k] end return true end |
#>(hash) ⇒ Object
call-seq:
hash > other -> true or false
Returns <code>true</code> if <i>other</i> is subset of
<i>hash</i>.
h1 = {a:1, b:2}
h2 = {a:1, b:2, c:3}
h1 > h2 #=> false
h2 > h1 #=> true
h1 > h1 #=> false
352 353 354 355 356 357 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 352 def >(hash) raise TypeError, "can't convert #{hash.class} to Hash" unless Hash === hash size > hash.size and hash.all? {|key, val| key?(key) and self[key] == val } end |
#>=(hash) ⇒ Object
call-seq:
hash >= other -> true or false
Returns <code>true</code> if <i>other</i> is subset of
<i>hash</i> or equals to <i>hash</i>.
h1 = {a:1, b:2}
h2 = {a:1, b:2, c:3}
h1 >= h2 #=> false
h2 >= h1 #=> true
h1 >= h1 #=> true
372 373 374 375 376 377 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 372 def >=(hash) raise TypeError, "can't convert #{hash.class} to Hash" unless Hash === hash size >= hash.size and hash.all? {|key, val| key?(key) and self[key] == val } end |
#_inspect(recur_list) ⇒ Object
internal method for Hash inspection
189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 189 def _inspect(recur_list) return "{}" if self.size == 0 return "{...}" if recur_list[self.object_id] recur_list[self.object_id] = true ary=[] keys=self.keys vals=self.values size=keys.size i=0 while i<size ary<<(keys[i]._inspect(recur_list) + "=>" + vals[i]._inspect(recur_list)) i+=1 end "{"+ary.join(", ")+"}" end |
#compact ⇒ Object
call-seq:
hsh.compact -> new_hsh
Returns a new hash with the nil values/key pairs removed
h = { a: 1, b: false, c: nil }
h.compact #=> { a: 1, b: false }
h #=> { a: 1, b: false, c: nil }
133 134 135 136 137 138 139 140 141 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 133 def compact h = {} self.keys.select{|k| self[k] != nil }.each {|k| h[k] = self[k] } h end |
#compact! ⇒ Object
call-seq:
hsh.compact! -> hsh
Removes all nil values from the hash. Returns the hash. Returns nil if the hash does not contain nil values.
h = { a: 1, b: false, c: nil }
h.compact! #=> { a: 1, b: false }
109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 109 def compact! keys = self.keys nk = keys.select{|k| self[k] != nil } return nil if (keys.size == nk.size) h = {} nk.each {|k| h[k] = self[k] } h self.replace(h) end |
#delete(key, &block) ⇒ Object
Delete the element with the key key
. Return the value of the element if key
was found. Return nil if nothing was found. If a block is given, call the block with the value of the element.
ISO 15.2.13.4.8
52 53 54 55 56 57 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 52 def delete(key, &block) if block && !self.has_key?(key) return block.call(key) end self.__delete(key) end |
#delete_if(&block) ⇒ Object
call-seq:
hsh.delete_if {| key, value | block } -> hsh
hsh.delete_if -> an_enumerator
Deletes every key-value pair from <i>hsh</i> for which <i>block</i>
evaluates to <code>true</code>.
If no block is given, an enumerator is returned instead.
h = { "a" => 100, "b" => 200, "c" => 300 }
h.delete_if {|key, value| key >= "b" } #=> {"a"=>100}
199 200 201 202 203 204 205 206 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 199 def delete_if(&block) return to_enum :delete_if unless block self.each do |k, v| self.delete(k) if block.call(k, v) end self end |
#dig(idx, *args) ⇒ Object
call-seq:
hsh.dig(key,...) -> object
Extracts the nested value specified by the sequence of key objects by calling dig
at each step, returning nil
if any intermediate step is nil
.
387 388 389 390 391 392 393 394 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 387 def dig(idx,*args) n = self[idx] if args.size > 0 n&.dig(*args) else n end end |
#each(&block) ⇒ Object Also known as: each_pair
Calls the given block for each element of self
and pass the key and value of each element.
call-seq:
hsh.each {| key, value | block } -> hsh
hsh.each_pair {| key, value | block } -> hsh
hsh.each -> an_enumerator
hsh.each_pair -> an_enumerator
If no block is given, an enumerator is returned instead.
h = { "a" => 100, "b" => 200 }
h.each {|key, value| puts "#{key} is #{value}" }
produces:
a is 100 b is 200
ISO 15.2.13.4.9
81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 81 def each(&block) return to_enum :each unless block keys = self.keys vals = self.values len = self.size i = 0 while i < len block.call [keys[i], vals[i]] i += 1 end self end |
#each_key(&block) ⇒ Object
Calls the given block for each element of self
and pass the key of each element.
call-seq:
hsh.each_key {| key | block } -> hsh
hsh.each_key -> an_enumerator
If no block is given, an enumerator is returned instead.
h = { "a" => 100, "b" => 200 }
h.each_key {|key| puts key }
produces:
a
b
ISO 15.2.13.4.10
114 115 116 117 118 119 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 114 def each_key(&block) return to_enum :each_key unless block self.keys.each{|k| block.call(k)} self end |
#each_value(&block) ⇒ Object
Calls the given block for each element of self
and pass the value of each element.
call-seq:
hsh.each_value {| value | block } -> hsh
hsh.each_value -> an_enumerator
If no block is given, an enumerator is returned instead.
h = { "a" => 100, "b" => 200 }
h.each_value {|value| puts value }
produces:
100
200
ISO 15.2.13.4.11
140 141 142 143 144 145 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 140 def each_value(&block) return to_enum :each_value unless block self.values.each{|v| block.call(v)} self end |
#eql?(hash) ⇒ Boolean
Returns true
if hash and other are both hashes with the same content compared by eql?.
ISO 15.2.13.4.32 (x)
31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 31 def eql?(hash) return true if self.equal?(hash) unless Hash === hash return false end return false if self.size != hash.size self.each do |k,v| return false unless hash.key?(k) return false unless self[k].eql?(hash[k]) end return true end |
#fetch(key, none = NONE, &block) ⇒ Object
call-seq:
hsh.fetch(key [, default] ) -> obj
hsh.fetch(key) {| key | block } -> obj
Returns a value from the hash for the given key. If the key can't be
found, there are several options: With no other arguments, it will
raise an <code>KeyError</code> exception; if <i>default</i> is
given, then that will be returned; if the optional code block is
specified, then that will be run and its result returned.
h = { "a" => 100, "b" => 200 }
h.fetch("a") #=> 100
h.fetch("z", "go fish") #=> "go fish"
h.fetch("z") { |el| "go fish, #{el}"} #=> "go fish, z"
The following example shows that an exception is raised if the key
is not found and a default value is not supplied.
h = { "a" => 100, "b" => 200 }
h.fetch("z")
<em>produces:</em>
prog.rb:2:in 'fetch': key not found (KeyError)
from prog.rb:2
171 172 173 174 175 176 177 178 179 180 181 182 183 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 171 def fetch(key, none=NONE, &block) unless self.key?(key) if block block.call(key) elsif none != NONE none else raise KeyError, "Key not found: #{key.inspect}" end else self[key] end end |
#fetch_values(*keys, &block) ⇒ Object
call-seq:
hsh.fetch_values(key, ...) -> array
hsh.fetch_values(key, ...) { |key| block } -> array
Returns an array containing the values associated with the given keys but also raises KeyError
when one of keys can’t be found. Also see Hash#values_at
and Hash#fetch
.
h = { "cat" => "feline", "dog" => "canine", "cow" => "bovine" }
h.fetch_values("cow", "cat") #=> ["bovine", "feline"]
h.fetch_values("cow", "bird") # raises KeyError
h.fetch_values("cow", "bird") { |k| k.upcase } #=> ["bovine", "BIRD"]
492 493 494 495 496 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 492 def fetch_values(*keys, &block) keys.map do |k| self.fetch(k, &block) end end |
#flatten(level = 1) ⇒ Object
call-seq:
hash.flatten -> an_array
hash.flatten(level) -> an_array
Returns a new array that is a one-dimensional flattening of this
hash. That is, for every key or value that is an array, extract
its elements into the new array. Unlike Array#flatten, this
method does not flatten recursively by default. The optional
<i>level</i> argument determines the level of recursion to flatten.
a = {1=> "one", 2 => [2,"two"], 3 => "three"}
a.flatten # => [1, "one", 2, [2, "two"], 3, "three"]
a.flatten(2) # => [1, "one", 2, 2, "two", 3, "three"]
224 225 226 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 224 def flatten(level=1) self.to_a.flatten(level) end |
#inspect ⇒ Object Also known as: to_s
ISO 15.2.13.4.30 (x)
208 209 210 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 208 def inspect self._inspect({}) end |
#invert ⇒ Object
call-seq:
hsh.invert -> new_hash
Returns a new hash created by using <i>hsh</i>'s values as keys, and
the keys as values.
h = { "n" => 100, "m" => 100, "y" => 300, "d" => 200, "a" => 0 }
h.invert #=> {0=>"a", 100=>"m", 200=>"d", 300=>"y"}
239 240 241 242 243 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 239 def invert h = self.class.new self.each {|k, v| h[v] = k } h end |
#keep_if(&block) ⇒ Object
call-seq:
hsh.keep_if {| key, value | block } -> hsh
hsh.keep_if -> an_enumerator
Deletes every key-value pair from <i>hsh</i> for which <i>block</i>
evaluates to false.
If no block is given, an enumerator is returned instead.
256 257 258 259 260 261 262 263 264 265 266 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 256 def keep_if(&block) return to_enum :keep_if unless block keys = [] self.each do |k, v| unless block.call([k, v]) self.delete(k) end end self end |
#key(val) ⇒ Object
call-seq:
hsh.key(value) -> key
Returns the key of an occurrence of a given value. If the value is
not found, returns <code>nil</code>.
h = { "a" => 100, "b" => 200, "c" => 300, "d" => 300 }
h.key(200) #=> "b"
h.key(300) #=> "c"
h.key(999) #=> nil
281 282 283 284 285 286 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 281 def key(val) self.each do |k, v| return k if v == val end nil end |
#merge(other, &block) ⇒ Object
Return a hash which contains the content of self
and other
. If a block is given it will be called for each element with a duplicate key. The value of the block will be the final value of this element.
ISO 15.2.13.4.22
175 176 177 178 179 180 181 182 183 184 185 186 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 175 def merge(other, &block) raise TypeError, "Hash required (#{other.class} given)" unless Hash === other h = self.dup if block other.each_key{|k| h[k] = (self.has_key?(k))? block.call(k, self[k], other[k]): other[k] } else other.each_key{|k| h[k] = other[k]} end h end |
#merge!(other, &block) ⇒ Object Also known as: update
call-seq:
hsh.merge!(other_hash) -> hsh
hsh.merge!(other_hash){|key, oldval, newval| block} -> hsh
Adds the contents of _other_hash_ to _hsh_. If no block is specified,
entries with duplicate keys are overwritten with the values from
_other_hash_, otherwise the value of each duplicate key is determined by
calling the block with the key, its value in _hsh_ and its value in
_other_hash_.
h1 = { "a" => 100, "b" => 200 }
h2 = { "b" => 254, "c" => 300 }
h1.merge!(h2) #=> {"a"=>100, "b"=>254, "c"=>300}
h1 = { "a" => 100, "b" => 200 }
h2 = { "b" => 254, "c" => 300 }
h1.merge!(h2) { |key, v1, v2| v1 }
#=> {"a"=>100, "b"=>200, "c"=>300}
84 85 86 87 88 89 90 91 92 93 94 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 84 def merge!(other, &block) raise TypeError, "Hash required (#{other.class} given)" unless Hash === other if block other.each_key{|k| self[k] = (self.has_key?(k))? block.call(k, self[k], other[k]): other[k] } else other.each_key{|k| self[k] = other[k]} end self end |
#reject(&block) ⇒ Object
call-seq:
hsh.reject {|key, value| block} -> a_hash
hsh.reject -> an_enumerator
Returns a new hash consisting of entries for which the block returns false.
If no block is given, an enumerator is returned instead.
h = { "a" => 100, "b" => 200, "c" => 300 }
h.reject {|k,v| k < "b"} #=> {"b" => 200, "c" => 300}
h.reject {|k,v| v > 100} #=> {"a" => 100}
1.8/1.9 Hash#reject returns Hash; ISO says nothing.
255 256 257 258 259 260 261 262 263 264 265 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 255 def reject(&block) return to_enum :reject unless block h = {} self.each{|k,v| unless block.call([k, v]) h[k] = v end } h end |
#reject!(&block) ⇒ Object
call-seq:
hsh.reject! {| key, value | block } -> hsh or nil
hsh.reject! -> an_enumerator
Equivalent to <code>Hash#delete_if</code>, but returns
<code>nil</code> if no changes were made.
1.8/1.9 Hash#reject! returns Hash; ISO says nothing.
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 224 def reject!(&block) return to_enum :reject! unless block keys = [] self.each{|k,v| if block.call([k, v]) keys.push(k) end } return nil if keys.size == 0 keys.each{|k| self.delete(k) } self end |
#replace(hash) ⇒ Object Also known as: initialize_copy
Replaces the contents of hsh with the contents of other hash
ISO 15.2.13.4.23
151 152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 151 def replace(hash) raise TypeError, "Hash required (#{hash.class} given)" unless Hash === hash self.clear hash.each_key{|k| self[k] = hash[k] } if hash.default_proc self.default_proc = hash.default_proc else self.default = hash.default end self end |
#select(&block) ⇒ Object Also known as: filter
call-seq:
hsh.select {|key, value| block} -> a_hash
hsh.select -> an_enumerator
Returns a new hash consisting of entries for which the block returns true.
If no block is given, an enumerator is returned instead.
h = { "a" => 100, "b" => 200, "c" => 300 }
h.select {|k,v| k > "a"} #=> {"b" => 200, "c" => 300}
h.select {|k,v| v < 200} #=> {"a" => 100}
1.9 Hash#select returns Hash; ISO says nothing
308 309 310 311 312 313 314 315 316 317 318 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 308 def select(&block) return to_enum :select unless block h = {} self.each{|k,v| if block.call([k, v]) h[k] = v end } h end |
#select!(&block) ⇒ Object Also known as: filter!
call-seq:
hsh.select! {| key, value | block } -> hsh or nil
hsh.select! -> an_enumerator
Equivalent to <code>Hash#keep_if</code>, but returns
<code>nil</code> if no changes were made.
1.9 Hash#select! returns Hash; ISO says nothing.
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 277 def select!(&block) return to_enum :select! unless block keys = [] self.each{|k,v| unless block.call([k, v]) keys.push(k) end } return nil if keys.size == 0 keys.each{|k| self.delete(k) } self end |
#to_h ⇒ Object
call-seq:
hsh.to_h -> hsh or new_hash
Returns +self+. If called on a subclass of Hash, converts
the receiver to a Hash object.
295 296 297 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 295 def to_h self end |
#to_proc ⇒ Object
473 474 475 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 473 def to_proc ->x{self[x]} end |
#transform_keys(&block) ⇒ Object
call-seq:
hsh.transform_keys {|key| block } -> new_hash
hsh.transform_keys -> an_enumerator
Returns a new hash, with the keys computed from running the block once for each key in the hash, and the values unchanged.
If no block is given, an enumerator is returned instead.
406 407 408 409 410 411 412 413 414 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 406 def transform_keys(&block) return to_enum :transform_keys unless block hash = {} self.keys.each do |k| new_key = block.call(k) hash[new_key] = self[k] end hash end |
#transform_keys!(&block) ⇒ Object
call-seq:
hsh.transform_keys! {|key| block } -> hsh
hsh.transform_keys! -> an_enumerator
Invokes the given block once for each key in hsh, replacing it with the new key returned by the block, and then returns hsh.
If no block is given, an enumerator is returned instead.
425 426 427 428 429 430 431 432 433 434 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 425 def transform_keys!(&block) return to_enum :transform_keys! unless block self.keys.each do |k| value = self[k] self.__delete(k) k = block.call(k) if block self[k] = value end self end |
#transform_values(&b) ⇒ Object
call-seq:
hsh.transform_values {|value| block } -> new_hash
hsh.transform_values -> an_enumerator
Returns a new hash with the results of running the block once for every value. This method does not change the keys.
If no block is given, an enumerator is returned instead.
446 447 448 449 450 451 452 453 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 446 def transform_values(&b) return to_enum :transform_values unless block_given? hash = {} self.keys.each do |k| hash[k] = yield(self[k]) end hash end |
#transform_values!(&b) ⇒ Object
call-seq:
hsh.transform_values! {|key| block } -> hsh
hsh.transform_values! -> an_enumerator
Invokes the given block once for each value in the hash, replacing with the new value returned by the block, and then returns hsh.
If no block is given, an enumerator is returned instead.
465 466 467 468 469 470 471 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 465 def transform_values!(&b) return to_enum :transform_values! unless block_given? self.keys.each do |k| self[k] = yield(self[k]) end self end |