Да, Ruby имеет синтаксис разделения массивов, очень похожий на Python. Вот ri
документация для метода индексации массива:
--------------------------------------------------------------- Array#[]
array[index] -> obj or nil
array[start, length] -> an_array or nil
array[range] -> an_array or nil
array.slice(index) -> obj or nil
array.slice(start, length) -> an_array or nil
array.slice(range) -> an_array or nil
------------------------------------------------------------------------
Element Reference---Returns the element at index, or returns a
subarray starting at start and continuing for length elements, or
returns a subarray specified by range. Negative indices count
backward from the end of the array (-1 is the last element).
Returns nil if the index (or starting index) are out of range.
a = [ "a", "b", "c", "d", "e" ]
a[2] + a[0] + a[1] #=> "cab"
a[6] #=> nil
a[1, 2] #=> [ "b", "c" ]
a[1..3] #=> [ "b", "c", "d" ]
a[4..7] #=> [ "e" ]
a[6..10] #=> nil
a[-3, 3] #=> [ "c", "d", "e" ]
# special cases
a[5] #=> nil
a[6, 1] #=> nil
a[5, 1] #=> []
a[5..10] #=> []
a[2..-1]
чтобы перейти от 3-го элемента к последнему.a[2...-1]
чтобы перейти от 3-го элемента ко второму последнему элементу.range(10)[:5:-1]
Если вы хотите разделить / вырезать массив по индексу i,
источник
Для этого вы можете использовать slice () :
Кстати, насколько мне известно, «списки» Python просто эффективно реализованы динамически растущими массивами. Вставка в начале выполняется за O (n), вставка в конце амортизируется за O (1), произвольный доступ - за O (1).
источник
slice!()
не модифицирует массив на месте, скорее, он «удаляет элемент (ы), заданный индексом (необязательно до элементов длины) или диапазоном». per ruby-doc.org/core-2.2.3/Array.html#method-i-slice-21другой способ - использовать метод диапазона
источник
Ruby 2.6 Beginless / Endless Ranges
источник
Мне нравятся диапазоны для этого:
Однако будьте очень осторожны с тем, входит ли конечная точка в ваш диапазон. Это становится критически важным для списка нечетной длины, когда вам нужно выбрать, где вы собираетесь сломать середину. В противном случае вы закончите двойной счет среднего элемента.
В приведенном выше примере средний элемент будет последовательно помещаться во второй половине.
источник
(list.length / 2.0).ceil
для последовательного размещения среднего элемента в первой половине, если вам это нужно.