Comment puis-je faire quelque chose comme ça? Prenez les n premiers éléments d'un tableau:
newNumbers = numbers[0..n]
Obtient actuellement l'erreur suivante:
error: could not find an overload for 'subscript' that accepts the supplied arguments
ÉDITER:
Voici la fonction dans laquelle je travaille.
func aFunction(numbers: Array<Int>, position: Int) -> Array<Int> {
var newNumbers = numbers[0...position]
return newNumbers
}
Slice
en unArray
, mais plutôt de créer un nouveau tableau à partir d'une tranche. Un casting utiliserait l'as
opérateur:numbers as Array
ce qui entraînerait une erreur...
changé en..<
; les trois points (une ellipse) sont restés les mêmes. Merci pour le rappel, cependant; J'ai mis à jour la réponse.#1. Utilisation de l'
Array
indice avec plageAvec Swift 5, lorsque vous écrivez…
…
newNumbers
N'est pas de typeArray<Int>
mais est de typeArraySlice<Int>
. C'est parce queArray
lessubscript(_:)
retours etArraySlice<Element>
qui, selon Apple, présentent une vue sur le stockage d'une plus grande baie.En outre, Swift fournit également
Array
un initialiseur appeléinit(_:)
qui nous permet de créer un nouveau tableau à partir d'unsequence
(y comprisArraySlice
).Par conséquent, vous pouvez utiliser
subscript(_:)
avecinit(_:)
pour obtenir un nouveau tableau à partir des n premiers éléments d'un tableau:# 2. Utilisation de
Array
laprefix(_:)
méthode deSwift fournit une
prefix(_:)
méthode pour les types conformes auCollection
protocole (y comprisArray
).prefix(_:)
a la déclaration suivante:Apple déclare également:
Par conséquent, comme alternative à l'exemple précédent, vous pouvez utiliser le code suivant afin de créer un nouveau tableau à partir des premiers éléments d'un autre tableau:
la source
la source
Une autre variante utilisant un
extension
nom d'argumentrange
Cette extension utilise
Range
etClosedRange
Tests:
la source
Array manière fonctionnelle:
varié:
L'avantage de cette méthode est qu'une telle mise en œuvre est sûre.
la source