Index Range Swift의 새로운 배열
어떻게 이런 일을 할 수 있습니까? 배열에서 처음 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
}
이것은 나를 위해 작동합니다.
var test = [1, 2, 3]
var n = 2
var test2 = test[0..<n]
처음부터 배열을 선언하는 방법에 문제가있을 수 있습니다.
편집하다:
함수를 수정하려면 Slice배열 로 캐스트해야 합니다.
func aFunction(numbers: Array<Int>, position: Int) -> Array<Int> {
var newNumbers = Array(numbers[0..<position])
return newNumbers
}
// test
aFunction([1, 2, 3], 2) // returns [1, 2]
#1. Array범위와 함께 아래 첨자 사용
Swift 5로 쓸 때…
let newNumbers = numbers[0...position]
… newNumbers유형은 Array<Int>아니지만 유형 ArraySlice<Int>입니다. 그 때문에 Array의 ' subscript(_:)다시 표시 ArraySlice<Element>하는 애플에 따르면, 선물 몇 가지 큰 배열의 저장에 대한 뷰.
게다가, Swift는 (포함 ) 에서 새로운 배열을 생성 할 수 있도록 Array하는 이니셜 라이저를 제공 합니다 .init(_:)sequenceArraySlice
따라서 subscript(_:)with init(_:)를 사용 하여 배열의 처음 n 개 요소 에서 새 배열을 가져올 수 있습니다 .
let array = Array(10...14) // [10, 11, 12, 13, 14]
let arraySlice = array[0..<3] // using Range
//let arraySlice = array[0...2] // using ClosedRange also works
//let arraySlice = array[..<3] // using PartialRangeUpTo also works
//let arraySlice = array[...2] // using PartialRangeThrough also works
let newArray = Array(arraySlice)
print(newArray) // prints [10, 11, 12]
# 2. 사용 Array의 prefix(_:)방법을
Swift는 프로토콜 (포함 ) prefix(_:)을 준수하는 유형에 대한 메소드를 제공합니다 . 다음과 같은 선언이 있습니다.CollectionArrayprefix(_:)
func prefix(_ maxLength: Int) -> ArraySlice<Element>
초기 요소를 포함하는 최대 maxLength 길이의 하위 시퀀스를 반환합니다.
Apple은 또한 다음과 같이 말합니다.
최대 길이가 컬렉션의 요소 수를 초과하면 결과에 컬렉션의 모든 요소가 포함됩니다.
따라서 이전 예제의 대안으로 다음 코드를 사용하여 다른 배열의 첫 번째 요소에서 새 배열을 만들 수 있습니다.
let array = Array(10...14) // [10, 11, 12, 13, 14]
let arraySlice = array.prefix(3)
let newArray = Array(arraySlice)
print(newArray) // prints [10, 11, 12]
func subArray<T>(array: [T], range: NSRange) -> [T] {
if range.location > array.count {
return []
}
return Array(array[range.location..<min(range.length, array.count)])
}
참고URL : https://stackoverflow.com/questions/24034398/new-array-from-index-range-swift
'Programing' 카테고리의 다른 글
| 헤더에 C ++ 인라인 함수가있는 이유는 무엇입니까? (0) | 2020.08.09 |
|---|---|
| AlertDialog 제목의 색상과 그 아래 줄의 색상을 어떻게 변경할 수 있습니까? (0) | 2020.08.09 |
| Xcode 4에서 저작권 템플릿을 어떻게 변경할 수 있습니까? (0) | 2020.08.09 |
| 서비스에 창을 삽입하는 방법은 무엇입니까? (0) | 2020.08.09 |
| mysql에서 순차 번호 매기기의 차이를 찾는 방법은 무엇입니까? (0) | 2020.08.09 |