for-in 구문을 이용하면 집합도 배열처럼 순회 탐색을 할 수 있다.
배열처럼 인덱스를 활용하여 순회 탐색을 할 수는 없지만, 순회 속성이 제공되므로 집합 자체를 for-in 구문에 그대로 넣고 순회 처리하는 방식으로 구문을 작성하면 된다.
// 집합을 정의
var genres : Set = ["Classic", "Rook", "Balad"]
// 집합을 순회 처리하면서 데이터를 출력
for g in genres {
print("\(g)")
}
스위프트에서 집합은 원래 순서가 없지만, sort() 메소드를 사용하면 정렬된 결과를 받을 수 있다.
물론, 이때도 집합 자체에 순서를 적용하는 것은 아니며 단순히 메소드 반환값을 정렬하는 것에 지나지 않는다.
// 집합을 정의
var genres : Set = ["Classic", "Rook", "Balad"]
// 집합을 순회 처리하면서 데이터를 출력
for g in genres.sorted() {
print("\(g)")
}
📝 sort()와 sorted()란?
- sort()
sort()는 기본적으로 원본 배열을 가지고 오름차순을 한다.
내림차순을 하고 싶다면 sort(by: >)와 같이 작성하면 된다.
var arr = [4, 19, 10, 9, 12, 22]
// 기본 오름차순 정렬
arr.sort()
print(arr) // [4, 9, 10, 12, 19, 22]
// 내림차순 정렬
arr.sort(by: >)
print(arr) // [22, 19, 12, 10, 9, 4]
- sorted()
sorted()는 sort()와 다르게 원본 배열을 건드리지 않고, 사본을 만들어서 오름차순으로 정렬 후 정렬 요소들을 반환해 주는 역할을 한다.
내림차순으로 정렬하고 싶다면 sort(by: >)처럼 sorted(by: >)를 사용하면 된다.
var arr = [4, 19, 10, 9, 12, 22]
// 기본 오름차순 정렬
var sortedArr = arr.sorted()
print(arr) // [4, 19, 10, 9, 12, 22]
print(sortedArr) // [4, 9, 10, 12, 19, 22]
// 내림차순 정렬
var sortedArrDown = arr.sorted(by: >)
print(arr) // [4, 19, 10, 9, 12, 22]
print(sortedArrDown) // [22, 19, 12, 10, 9, 4]
- sort()와 sorted()의 차이점, 주의할 점
sort()는 원본 배열의 자체 순서를 변경한다.
기존의 배열의 순서가 중요한 경우 sort()를 사용하면 원본 배열의 순서가 중요한 상황인데 sort()를 사용해서 원본 배열의 순서가 바뀌면서 문제가 생기게 된다.
기존 배열의 순서가 중요한 경우에는 sort()가 아닌 sorted를 사용하자 🙂
sorted()는 원본 배열이 아닌 사본 만들어 사용을 한다.
값을 복제하는 만큼 메모리를 차지하는 용량은 2배가 되는 것이다.
거기다가 한번 더 사용하게 되면 그만큼 메모리가 늘어나니 큰 사이즈의 배열을 사용하면 주의하여 사용해야 한다.
'메모장' 카테고리의 다른 글
Swift 집합 연산 (2) | 2023.03.28 |
---|---|
Swift 집합의 동적 추가와 삭제 (3) | 2023.03.24 |
Swift 집합 (1) | 2023.03.21 |
Swift 범위 연산자를 이용한 인덱스 참조 (1) | 2023.03.20 |
Swift 배열 데이터 동적 추가 (1) | 2023.03.16 |