Sim, o Ruby tem uma sintaxe de fatiamento de matriz muito semelhante ao Python. Aqui está a ri
documentação para o método de índice de matriz:
--------------------------------------------------------------- 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]
para passar do terceiro elemento para o último.a[2...-1]
para ir do terceiro elemento até o segundo último elemento.range(10)[:5:-1]
Se você deseja dividir / cortar a matriz em um índice i,
fonte
Você pode usar slice () para isso:
A propósito, de acordo com o meu conhecimento, as "listas" do Python são implementadas de maneira dinâmica e com crescente crescimento. A inserção no início é em O (n), a inserção no final é amortizada O (1), o acesso aleatório é O (1).
fonte
slice!()
não modifica a matriz no lugar, mas "Exclui os elementos fornecidos por um índice (opcionalmente até elementos de comprimento) ou por um intervalo". Por ruby-doc.org/core-2.2.3/Array.html#method-i-slice-21outra maneira é usar o método range
fonte
Ruby 2.6 Intervalos sem começo / sem fim
fonte
Eu gosto de intervalos para isso:
No entanto, tenha muito cuidado se o terminal está incluído no seu intervalo. Isso se torna crítico em uma lista de tamanho ímpar, na qual você precisa escolher onde vai quebrar o meio. Caso contrário, você acabará contando duas vezes o elemento do meio.
O exemplo acima colocará consistentemente o elemento do meio na última metade.
fonte
(list.length / 2.0).ceil
para colocar consistentemente o elemento do meio na primeira metade, se precisar.