Module: Darthjee::CoreExt::Array
- Included in:
- Array
- Defined in:
- lib/darthjee/core_ext/array.rb,
lib/darthjee/core_ext/array/hash_builder.rb
Overview
Module containing new usefull methods to Ruby vanilla Array
Defined Under Namespace
Classes: HashBuilder
Instance Method Summary collapse
-
#as_hash(keys) ⇒ ::Hash
Returns a Hash where the values are the elements of the array.
-
#average ⇒ ::Float
Calculate the average of all values in the array.
-
#chain_map(*methods) {|element| ... } ⇒ ::Array
Maps the array using the given methods on each element of the array.
-
#mapk(*keys) ⇒ ::Array
Maps array chain fetching the keys of the hashes inside.
-
#procedural_join(mapper = proc(&:to_s)) {|previous, nexte| ... } ⇒ Object
Joins elements in a string using a proc to convert elements to Strig and a block for joining.
-
#random ⇒ Object
Reeturns a random element of the array without altering it.
-
#random! ⇒ Object
Reeturns a random element of the array removing it from the array.
Instance Method Details
#as_hash(keys) ⇒ ::Hash
Returns a Hash where the values are the elements of the array
20 21 22 |
# File 'lib/darthjee/core_ext/array.rb', line 20 def as_hash(keys) Array::HashBuilder.new(self, keys).build end |
#average ⇒ ::Float
Calculate the average of all values in the array
34 35 36 37 |
# File 'lib/darthjee/core_ext/array.rb', line 34 def average return 0 if empty? sum * 1.0 / length end |
#chain_map(*methods) {|element| ... } ⇒ ::Array
Maps the array using the given methods on each element of the array
62 63 64 65 66 67 68 69 |
# File 'lib/darthjee/core_ext/array.rb', line 62 def chain_map(*methods, &block) result = methods.inject(self) do |array, method| array.map(&method) end return result unless block_given? result.map(&block) end |
#mapk(*keys) ⇒ ::Array
Maps array chain fetching the keys of the hashes inside
fetched from hashes inside
93 94 95 96 97 98 99 |
# File 'lib/darthjee/core_ext/array.rb', line 93 def mapk(*keys) keys.inject(self) do |enum, key| enum.map do |hash| hash&.[] key end end end |
#procedural_join(mapper = proc(&:to_s)) {|previous, nexte| ... } ⇒ Object
Joins elements in a string using a proc to convert elements to Strig and a block for joining
to string before joining
123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/darthjee/core_ext/array.rb', line 123 def procedural_join(mapper = proc(&:to_s)) return '' if empty? list = dup previous = first list[0] = mapper.call(previous).to_s list.inject do |string, value| link = yield(previous, value) if block_given? next_string = mapper.call(value) previous = value "#{string}#{link}#{next_string}" end end |
#random ⇒ Object
Reeturns a random element of the array without altering it
144 145 146 |
# File 'lib/darthjee/core_ext/array.rb', line 144 def random self[Random.rand(size)] end |
#random! ⇒ Object
Reeturns a random element of the array removing it from the array
154 155 156 |
# File 'lib/darthjee/core_ext/array.rb', line 154 def random! slice!(Random.rand(size)) end |