본문 바로가기

프로그래밍/SWIFT

SWIFT 기초] 배열 슬라이싱 python과 swift 비교

반응형
>>> 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