Sha256: 36220e43a2b071c8359fe48663286bab3d97de1b297ce11e5af69482ca0d890b

Contents?: true

Size: 775 Bytes

Versions: 109

Compression:

Stored size: 775 Bytes

Contents

# frozen_string_literal: true

class ReeArray::SplitBy
  include Ree::FnDSL

  fn :split_by

  doc(<<~DOC)
    Divides the array into one or more subarrays based on a delimiting +value+
    or the result of an optional block.
    
    split([1, 2, 3, 4, 5], 3)              # => [[1, 2], [4, 5]]
    split((1..10).to_a) { |i| i % 3 == 0 } # => [[1, 2], [4, 5], [7, 8], [10]]
  DOC
  contract(ArrayOf[Any], Any, Optblock => ArrayOf[Any])
  def call(array, value = nil, &block)
    arr = array.dup
    result = []

    if block_given?
      while (idx = arr.index(&block))
        result << arr.shift(idx)
        arr.shift
      end
    else
      while (idx = arr.index(value))
        result << arr.shift(idx)
        arr.shift
      end
    end

    result << arr
  end
end

Version data entries

109 entries across 109 versions & 1 rubygems

Version Path
ree_lib-1.0.109 lib/ree_lib/packages/ree_array/package/ree_array/functions/split_by.rb
ree_lib-1.0.108 lib/ree_lib/packages/ree_array/package/ree_array/functions/split_by.rb
ree_lib-1.0.107 lib/ree_lib/packages/ree_array/package/ree_array/functions/split_by.rb
ree_lib-1.0.106 lib/ree_lib/packages/ree_array/package/ree_array/functions/split_by.rb
ree_lib-1.0.105 lib/ree_lib/packages/ree_array/package/ree_array/functions/split_by.rb
ree_lib-1.0.104 lib/ree_lib/packages/ree_array/package/ree_array/functions/split_by.rb
ree_lib-1.0.103 lib/ree_lib/packages/ree_array/package/ree_array/functions/split_by.rb
ree_lib-1.0.102 lib/ree_lib/packages/ree_array/package/ree_array/functions/split_by.rb
ree_lib-1.0.101 lib/ree_lib/packages/ree_array/package/ree_array/functions/split_by.rb
ree_lib-1.0.100 lib/ree_lib/packages/ree_array/package/ree_array/functions/split_by.rb
ree_lib-1.0.99 lib/ree_lib/packages/ree_array/package/ree_array/functions/split_by.rb
ree_lib-1.0.98 lib/ree_lib/packages/ree_array/package/ree_array/functions/split_by.rb
ree_lib-1.0.97 lib/ree_lib/packages/ree_array/package/ree_array/functions/split_by.rb
ree_lib-1.0.96 lib/ree_lib/packages/ree_array/package/ree_array/functions/split_by.rb
ree_lib-1.0.95 lib/ree_lib/packages/ree_array/package/ree_array/functions/split_by.rb
ree_lib-1.0.94 lib/ree_lib/packages/ree_array/package/ree_array/functions/split_by.rb
ree_lib-1.0.93 lib/ree_lib/packages/ree_array/package/ree_array/functions/split_by.rb
ree_lib-1.0.92 lib/ree_lib/packages/ree_array/package/ree_array/functions/split_by.rb
ree_lib-1.0.91 lib/ree_lib/packages/ree_array/package/ree_array/functions/split_by.rb
ree_lib-1.0.90 lib/ree_lib/packages/ree_array/package/ree_array/functions/split_by.rb