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.
-
.try_convert(obj) ⇒ Object
call-seq: Hash.try_convert(obj) -> hash or nil.
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.
- #__update(h) ⇒ Object
-
#_inspect ⇒ Object
internal method for Hash inspection.
-
#compact ⇒ Object
call-seq: hsh.compact -> new_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
selfand pass the key and value of each element. -
#each_key(&block) ⇒ Object
Calls the given block for each element of
selfand pass the key of each element. -
#each_value(&block) ⇒ Object
Calls the given block for each element of
selfand pass the value of each element. -
#eql?(hash) ⇒ Boolean
Returns
trueif 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
selfandother. -
#merge!(other, &block) ⇒ Object
(also: #update)
call-seq: hsh.merge!(other_hash) -> hsh hsh.merge!(other_hash){|key, oldval, newval| block} -> hsh.
-
#rehash ⇒ Object
call-seq: hsh.rehash -> 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
call-seq: hsh.select {|key, value| block} -> a_hash hsh.select -> an_enumerator.
-
#select!(&block) ⇒ Object
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?, #collect, #count, #cycle, #detect, #drop, #drop_while, #each_cons, #each_slice, #each_with_index, #each_with_object, #entries, #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, to_h, #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 o.respond_to?(:to_hash) h = self.new object[0].to_hash.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 |
.try_convert(obj) ⇒ Object
74 75 76 77 78 79 80 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 74 def self.try_convert(obj) if obj.respond_to?(:to_hash) obj.to_hash else nil end 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
302 303 304 305 306 307 308 309 310 311 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 302 def <(hash) begin hash = hash.to_hash rescue NoMethodError raise TypeError, "can't convert #{hash.class} to Hash" end 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
326 327 328 329 330 331 332 333 334 335 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 326 def <=(hash) begin hash = hash.to_hash rescue NoMethodError raise TypeError, "can't convert #{hash.class} to Hash" end 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 25 26 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 13 def ==(hash) return true if self.equal?(hash) begin hash = hash.to_hash rescue NoMethodError 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
350 351 352 353 354 355 356 357 358 359 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 350 def >(hash) begin hash = hash.to_hash rescue NoMethodError raise TypeError, "can't convert #{hash.class} to Hash" end 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
374 375 376 377 378 379 380 381 382 383 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 374 def >=(hash) begin hash = hash.to_hash rescue NoMethodError raise TypeError, "can't convert #{hash.class} to Hash" end size >= hash.size and hash.all? {|key, val| key?(key) and self[key] == val } end |
#__update(h) ⇒ Object
346 347 348 349 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 346 def __update(h) h.each_key{|k| self[k] = h[k]} self end |
#_inspect ⇒ Object
internal method for Hash inspection
197 198 199 200 201 202 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 197 def _inspect return "{}" if self.size == 0 "{"+self.map {|k,v| k._inspect + "=>" + v._inspect }.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 }
127 128 129 130 131 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 127 def compact result = self.dup result.compact! result 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
56 57 58 59 60 61 62 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 56 def delete(key, &block) if block && !self.has_key?(key) block.call(key) else self.__delete(key) end 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}
189 190 191 192 193 194 195 196 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 189 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.
393 394 395 396 397 398 399 400 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 393 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
86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 86 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
119 120 121 122 123 124 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 119 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
145 146 147 148 149 150 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 145 def each_value(&block) return to_enum :each_value unless block self.keys.each{|k| block.call(self[k])} 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)
33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 33 def eql?(hash) return true if self.equal?(hash) begin hash = hash.to_hash rescue NoMethodError 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
161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 161 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"]
497 498 499 500 501 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 497 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"]
214 215 216 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 214 def flatten(level=1) self.to_a.flatten(level) end |
#inspect ⇒ Object Also known as: to_s
ISO 15.2.13.4.30 (x)
207 208 209 210 211 212 213 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 207 def inspect begin self._inspect rescue SystemStackError "{...}" end 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"}
229 230 231 232 233 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 229 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.
246 247 248 249 250 251 252 253 254 255 256 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 246 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
271 272 273 274 275 276 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 271 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
181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 181 def merge(other, &block) h = {} raise TypeError, "can't convert argument into Hash" unless other.respond_to?(:to_hash) other = other.to_hash self.each_key{|k| h[k] = self[k]} 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}
103 104 105 106 107 108 109 110 111 112 113 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 103 def merge!(other, &block) raise TypeError, "can't convert argument into Hash" unless other.respond_to?(:to_hash) 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 |
#rehash ⇒ Object
call-seq:
hsh.rehash -> hsh
Rebuilds the hash based on the current hash values for each key. If
values of key objects have changed since they were inserted, this
method will reindex <i>hsh</i>.
h = {"AAA" => "b"}
h.keys[0].chop!
h #=> {"AA"=>"b"}
h["AA"] #=> nil
h.rehash #=> {"AA"=>"b"}
h["AA"] #=> "b"
338 339 340 341 342 343 344 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 338 def rehash h = {} self.each{|k,v| h[k] = v } self.replace(h) 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.
258 259 260 261 262 263 264 265 266 267 268 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 258 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.
227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 227 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
156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 156 def replace(hash) raise TypeError, "can't convert argument into Hash" unless hash.respond_to?(:to_hash) self.clear hash = hash.to_hash 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
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
311 312 313 314 315 316 317 318 319 320 321 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 311 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
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.
280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 |
# File 'ext/enterprise_script_service/mruby/mrblib/hash.rb', line 280 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.
285 286 287 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 285 def to_h self end |
#to_proc ⇒ Object
478 479 480 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 478 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.
412 413 414 415 416 417 418 419 420 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 412 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.
431 432 433 434 435 436 437 438 439 440 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 431 def transform_keys!(&block) return to_enum :transform_keys! unless block self.keys.each do |k| value = self[k] new_key = block.call(k) self.__delete(k) self[new_key] = 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.
452 453 454 455 456 457 458 459 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 452 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.
470 471 472 473 474 475 476 |
# File 'ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb', line 470 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 |