Module: ArrayCollection::ArrayComponents::Joining
- Included in:
- CollectionArray
- Defined in:
- lib/array_collection/array_components/joining.rb
Overview
Module containing methods for joining arrays
Instance Method Summary collapse
- #cross_join(array1, array2) ⇒ Object
- #full_join(array1, array2, key1, key2) ⇒ Object
- #full_outter_join(array1, array2, key1, key2) ⇒ Object
- #inner_join(array1, array2, key1, key2) ⇒ Object
- #join(array1, array2, key1, key2) ⇒ Object
- #left_join(array1, array2, key1, key2) ⇒ Object
- #right_join(array1, array2, key1, key2) ⇒ Object
Instance Method Details
#cross_join(array1, array2) ⇒ Object
56 57 58 59 60 |
# File 'lib/array_collection/array_components/joining.rb', line 56 def cross_join(array1, array2) return cross_join_hashes(array1, array2) if array1.all?(Hash) && array2.all?(Hash) array1.product(array2) end |
#full_join(array1, array2, key1, key2) ⇒ Object
45 46 47 48 49 50 |
# File 'lib/array_collection/array_components/joining.rb', line 45 def full_join(array1, array2, key1, key2) left_join_result = left_join(array1, array2, key1, key2) right_join_result = right_join(array1, array2, key1, key2) left_join_result.concat(right_join_result).uniq end |
#full_outter_join(array1, array2, key1, key2) ⇒ Object
52 53 54 |
# File 'lib/array_collection/array_components/joining.rb', line 52 def full_outter_join(array1, array2, key1, key2) full_join(array1, array2, key1, key2) end |
#inner_join(array1, array2, key1, key2) ⇒ Object
13 14 15 16 17 18 19 |
# File 'lib/array_collection/array_components/joining.rb', line 13 def inner_join(array1, array2, key1, key2) array1.reject do |item1| matching_items = array2.select { |item2| item1[key1] == item2[key2] } matching_items.each { |matched_item| item1.merge!(matched_item) } matching_items.empty? end end |
#join(array1, array2, key1, key2) ⇒ Object
9 10 11 |
# File 'lib/array_collection/array_components/joining.rb', line 9 def join(array1, array2, key1, key2) inner_join(array1, array2, key1, key2) end |
#left_join(array1, array2, key1, key2) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/array_collection/array_components/joining.rb', line 21 def left_join(array1, array2, key1, key2) return array1 if array2.count.zero? right_index = build_index(array2, key2) result = [] array1.each do |left_item| right_items = right_index[left_item[key1]] || [nil_attributes(array2)] merge_items(result, left_item, right_items) end result end |
#right_join(array1, array2, key1, key2) ⇒ Object
34 35 36 37 38 39 40 41 42 43 |
# File 'lib/array_collection/array_components/joining.rb', line 34 def right_join(array1, array2, key1, key2) left_index = build_index(array1, key1) result = [] array2.each do |right_item| left_items = left_index[right_item[key2]] || [nil_attributes(array1)] merge_items(result, right_item, left_items) end result end |