@@ -354,60 +354,6 @@ def slice(*args)
354354 sliced_table
355355 end
356356
357- # TODO
358- #
359- # @return [Arrow::Table]
360- def merge ( other )
361- added_columns = { }
362- removed_columns = { }
363-
364- case other
365- when Hash
366- other . each do |name , value |
367- name = name . to_s
368- if value
369- added_columns [ name ] = ensure_raw_column ( name , value )
370- else
371- removed_columns [ name ] = true
372- end
373- end
374- when Table
375- added_columns = { }
376- other . columns . each do |column |
377- name = column . name
378- added_columns [ name ] = ensure_raw_column ( name , column )
379- end
380- else
381- message = "merge target must be Hash or Arrow::Table: " +
382- "<#{ other . inspect } >: #{ inspect } "
383- raise ArgumentError , message
384- end
385-
386- new_columns = [ ]
387- columns . each do |column |
388- column_name = column . name
389- new_column = added_columns . delete ( column_name )
390- if new_column
391- new_columns << new_column
392- next
393- end
394- next if removed_columns . key? ( column_name )
395- new_columns << ensure_raw_column ( column_name , column )
396- end
397- added_columns . each do |name , new_column |
398- new_columns << new_column
399- end
400- new_fields = [ ]
401- new_arrays = [ ]
402- new_columns . each do |new_column |
403- new_fields << new_column [ :field ]
404- new_arrays << new_column [ :data ]
405- end
406- table = self . class . new ( new_fields , new_arrays )
407- share_input ( table )
408- table
409- end
410-
411357 alias_method :remove_column_raw , :remove_column
412358 def remove_column ( name_or_index )
413359 case name_or_index
@@ -628,6 +574,13 @@ def method_missing(name, *args, &block)
628574 end
629575
630576 private
577+
578+ def create_merged_container ( fields , arrays )
579+ table = self . class . new ( fields , arrays )
580+ share_input ( table )
581+ table
582+ end
583+
631584 def slice_by_range ( from , to )
632585 slice_raw ( from , to - from + 1 )
633586 end
0 commit comments