본문 바로가기
Swift

[Swift] stride() 알아보기

by ykr0919 2024. 5. 27.

 

 

코테를 풀다가 stride를 사용했었는데 stride가 두 가지가 있었음!

 

stride(from:to:by:)와 stride(from:through:by:)가 있는데, 

 

정확한 차이가 궁금해서 알아보려고 함!!

 

stride는

사전적 의미로는 걸음을 의미함.

 

 

시작 값부터 종료 값까지(포함하지 않음)의 시퀀스를 지정된 양만큼 단계별로 반환합니다.라고 함. 

 

매개변수

  • start
    시퀀스에 사용할 시작 값입니다. 시퀀스에 값이 포함되어 있으면 첫 번째 값은 start입니다.
  • end
    시퀀스를 제한하는 종료 값입니다. end는 결과 시퀀스의 요소가 아닙니다.
  • stride
    각 반복마다 단계별로 수행할 양입니다. 긍정적인 보폭은 위쪽으로 반복됩니다. 음의 보폭은 아래쪽으로 반복됩니다.

반환 값

시작부터 끝까지(포함하지는 않음) 시퀀스입니다. 시퀀스의 각 값은 스트라이드 단위로 진행됩니다.

 

 

예시를 보자!!

for i in stride(from: 0, to: 10, by: 1) {
    print(i, terminator: " ")
}
// 0 1 2 3 4 5 6 7 8 9

 

0부터 10까지 1만큼의 보폭으로 반복하겠다는 의미임!!

 

for i in stride(from: 0, to: 10, by: 2) {
    print(i, terminator: " ")
}
// 0 2 4 6 8

 

보폭이 2라면 위와 같음!

 

줄이는 것도 가능할까??? 

for i in stride(from: 10, to: 0, by: -1) {
    print(i, terminator: " ")
}
// 10 9 8 7 6 5 4 3 2 1

 

가능함!!

 

근데 이상한 점이 있는데 나는 분명 0에서 10까지 범위를 주었는데 왜?? 9까지만 반복할까?? 🤔

 

다시 공식문서를 보면 "end는 시퀀스를 제한하는 종료 값입니다. end는 결과 시퀀스의 요소가 아닙니다!! "아니라고 함.

 

반환 값도 end(끝)은 포함하지 않는다고 함! 

 

즉, to 파라미터에 있는 수를 제외하고 카운트하는 것임!!

 

 

그럼 나는 10을 포함하고 싶다면 어떻게 해야 할까?? 🤷‍♂️

 

그땐 stride(from:through:by:) 사용하면 됨.

 

 

시작 값부터 종료 값까지(가능한 경우 포함) 시퀀스를 지정된 양만큼 단계별로 반환합니다.라고 함.

 

매개변수

  • start
    시퀀스에 사용할 시작 값입니다. 시퀀스에 값이 포함되어 있으면 첫 번째 값은 start입니다.
  • end
    시퀀스를 제한하는 종료 값입니다. end는 stride 단계를 사용하여 시작부터 생성될 수 있는 경우에만 결과 시퀀스의 요소입니다.
  • stride
    각 반복마다 단계별로 수행할 양입니다. 긍정적인 보폭은 위쪽으로 반복됩니다. 음의 보폭은 아래쪽으로 반복됩니다.

반환 값

시작부터 끝까지, 가능하면 끝까지의 시퀀스입니다. 시퀀스의 각 값은 스트라이드로 구분됩니다.

 

for i in stride(from: 0, through: 10, by: 1) {
    print(i, terminator: " ")
}
// 0 1 2 3 4 5 6 7 8 9 10

 

for i in stride(from: 10, through: 0, by: -1) {
    print(i, terminator: " ")
}
// 10 9 8 7 6 5 4 3 2 1 0

 

through파라미터에 있는 수를 포함하고 있음!!

 

시작부터 끝까지, 가능하면 끝까지의 시퀀스입니다. 이기 때문!!! 

 

시작 값부터 종료 값까지(가능한 경우 포함) 시퀀스를 지정된 양만큼 단계별로 반환한다고 하는데 

 

여기서 가능한 경우란!!

 

위에서 1의 보폭을 가질 때는 0부터 10까지 출력이 되었지만 

 

만약 3이라면 어떨까?? 10이 나올까?? 

for i in stride(from: 0, through: 10, by: 3) {
    print(i, terminator: " ")
}
// 0 3 6 9

 

당연히 출력될 수가 없음!!!! 

 

그렇기 때문에 보폭의 범위에 포함되는 경우에 출력이 된다는 말임!!

 

 

 

 

결국 둘의 차이는 시퀀스를 제한하는 종료 값이 결과 시퀀스의 요소가 되는지 안되는지의 차이였음!!

 

 

 

 

 

참고 및 인용

 

https://developer.apple.com/documentation/swift/stride(from:through:by:)

https://developer.apple.com/documentation/swift/stride(from:to:by:)