Como posso fazer algo assim? Pegue os primeiros n elementos de uma matriz:
newNumbers = numbers[0..n]
Atualmente, obtendo o seguinte erro:
error: could not find an overload for 'subscript' that accepts the supplied arguments
EDITAR:
Aqui está a função em que estou trabalhando.
func aFunction(numbers: Array<Int>, position: Int) -> Array<Int> {
var newNumbers = numbers[0...position]
return newNumbers
}
Slice
a umArray
, mas sim a criação de uma nova matriz de uma fatia. Uma conversão usaria oas
operador: onumbers as Array
que resultaria em um erro...
mudaram para..<
; os três pontos (reticências) permaneceram os mesmos. Obrigado pelo lembrete; Eu atualizei a resposta.# 1 Usando
Array
subscrito com intervaloCom o Swift 5, quando você escreve…
…
newNumbers
Não é do tipo,Array<Int>
mas é do tipoArraySlice<Int>
. Isso porqueArray
'ssubscript(_:)
retorna umArraySlice<Element>
que, de acordo com a Apple, apresenta uma visão sobre o armazenamento de alguns matriz maior.Além disso, o Swift também fornece
Array
um inicializador chamadoinit(_:)
que nos permite criar uma nova matriz a partir de umsequence
(incluindoArraySlice
).Portanto, você pode usar
subscript(_:)
withinit(_:)
para obter uma nova matriz dos primeiros n elementos de uma matriz:# 2 Usando
Array
oprefix(_:)
métodoSwift fornece um
prefix(_:)
método para tipos que estão em conformidade com oCollection
protocolo (inclusiveArray
).prefix(_:)
tem a seguinte declaração:A Apple também declara:
Portanto, como alternativa ao exemplo anterior, você pode usar o seguinte código para criar uma nova matriz a partir dos primeiros elementos de outra matriz:
fonte
fonte
Mais uma variante usando
extension
e nome do argumentorange
Esta extensão usa
Range
eClosedRange
Testes:
fonte
Matriz forma funcional:
variou:
A vantagem desse método é que essa implementação é segura.
fonte