반응형
>>> l = list(range(10))
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> l[:3]
[0, 1, 2]
>>> l[3:7]
[3, 4, 5, 6]
>>> l[7:]
[7, 8, 9]
위와 같은 파이썬에서의 슬라이싱을 swift 에서는 다음과 같이 할 수 있다.
39> let l = Array(0..<10)
l: [Int] = 10 values {
[0] = 0
[1] = 1
[2] = 2
[3] = 3
[4] = 4
[5] = 5
[6] = 6
[7] = 7
[8] = 8
[9] = 9
}
40> l[0..<3]
$R23: ArraySlice<Int> = 3 values {
[0] = 0
[1] = 1
[2] = 2
}
41> l[3..<7]
$R24: ArraySlice<Int> = 4 values {
[3] = 3
[4] = 4
[5] = 5
[6] = 6
}
42> Array(l[7...])
$R25: [Int] = 3 values {
[0] = 7
[1] = 8
[2] = 9
}
43> l[7..<l.count]
$R26: ArraySlice<Int> = 3 values {
[7] = 7
[8] = 8
[9] = 9
}
swift 코드에서의 주의할 점은, 인덱스로 주어지는 3...7 등이 단순한 숫자배열([Int]) 타입(type)과 다른 range 라는 타입이라는 점. 파이썬에서는 막 혼동해서 사용하게 되지만, swift 에서는 타입에 좀 더 주의를 기울여야 한다.
또 하나 매우 중요한 차이점은
l[3..<7] 의 결과를 보면, 타입이 ArraySlice 이고, 각 엘리먼트들의 인덱스가 원본 Array의 것과 동일하다는 점이다. 파이썬에서 처럼 사용하려면, Array(l[3..<7]) 처럼 하여, 새로운 Array 를 생성해 주어야 한다.
728x90
'프로그래밍 > SWIFT' 카테고리의 다른 글
[유튭링ㅋ] Mastering Concurrency in iOS (0) | 2023.06.22 |
---|---|
[Swift] 가장 간단한 Actor 샘플코드, Actor Counter (0) | 2023.06.14 |
[SwiftUI] @State, struct, class (0) | 2022.12.19 |
[Swift] publishing changes from background threads is not allowed; make sure to publish values from the main thread (0) | 2022.11.21 |
[SWIFT] dump() 함수 출력을 문자열로 바꾸는 방법 (0) | 2022.10.15 |