Как я могу сделать что-то подобное? Возьмите первые n элементов из массива:
newNumbers = numbers[0..n]
В настоящее время появляется следующая ошибка:
error: could not find an overload for 'subscript' that accepts the supplied arguments
РЕДАКТИРОВАТЬ:
Вот функция, над которой я работаю.
func aFunction(numbers: Array<Int>, position: Int) -> Array<Int> {
var newNumbers = numbers[0...position]
return newNumbers
}
Slice
АняArray
, а создание нового массива из кусочка. Приведение будет использоватьas
оператор:numbers as Array
что приведет к ошибке...
изменились на..<
; три точки (многоточие) остались прежними. Тем не менее, спасибо за напоминание; Я обновил ответ.# 1. Использование
Array
индекса с диапазономВ Swift 5, когда вы пишете…
…
newNumbers
Не тип,Array<Int>
а типArraySlice<Int>
. Это потому , чтоArray
«Ssubscript(_:)
возвращаетArraySlice<Element>
который, согласно Apple, представляет собой представление о хранилище некоторого большего массива.Кроме того, Swift также предоставляет
Array
инициализатор, называемый,init(_:)
который позволяет нам создать новый массив изsequence
(включаяArraySlice
).Следовательно, вы можете использовать
subscript(_:)
withinit(_:)
, чтобы получить новый массив из первых n элементов массива:# 2. Использование
Array
«Sprefix(_:)
методSwift предоставляет
prefix(_:)
метод для типов, которые соответствуютCollection
протоколу (в том числеArray
).prefix(_:)
имеет следующее объявление:Apple также заявляет:
Поэтому в качестве альтернативы предыдущему примеру вы можете использовать следующий код, чтобы создать новый массив из первых элементов другого массива:
источник
источник
Еще один вариант использования
extension
и имени аргументаrange
Это расширение использует
Range
иClosedRange
тесты:
источник
Функциональный способ массива:
варьировались:
Преимущество этого метода в том, что такая реализация безопасна.
источник