[Swift] sort(), sorted() 차이점

Kio·2021년 12월 25일
0

Swift

목록 보기
7/14
post-thumbnail

안녕하세요! Kio입니다 👻

Swift에서 컬렉션 타입(Collection Types) 을 정렬할 때
sort(), sorted() 를 사용 가능하다고 하는데요.

하지만 컬렉션 타입(Collection Types) 중에서
세트(set), 딕셔너리(dictionary) 는 정렬되어 있지 않은 타입이기에
이번 포스팅은 배열(array) 에 해당하는 이야기입니다.

오늘은 아래 2가지에 대해 어떤 차이점이 있는 지 알아보고자 합니다.

  • sort()
  • sorted()




sort()

Sorts the collection in place.

sort()배열(array) 의 원본을 정렬하는 메서드입니다.


선언 (Declaration)

mutating func sort()

공식문서에 따르면 위와 같이 선언되어 있고,
Collection Types의 요소가 Comparable 를 준수할 때 사용 가능합니다.


예시 (Discussion)

sort() 의 기본 정렬은 오름차순입니다.
다음과 같은 연산자 <, > 를 통해 정렬 형태를 지정하는 것도 가능합니다.

  • sort() - 오름차순
  • sort(by: <) - 오름차순
  • sort(by: >) - 내림차순

sort()

// 오름차순 정렬
var friends = ["Steven", "Kio", "Ryan", "KangKyung", "James", "Wody"]
friends.sort()
print(friends)
// Prints "["James", "KangKyung", "Kio", "Ryan", "Steven", "Wody"]"

sort(by: <)

// 오름차순 정렬
var friends = ["Steven", "Kio", "Ryan", "KangKyung", "James", "Wody"]
friends.sort(by: <)
print(friends)
// Prints "["James", "KangKyung", "Kio", "Ryan", "Steven", "Wody"]"

sort(by: >)

// 내림차순 정렬
var friends = ["Steven", "Kio", "Ryan", "KangKyung", "James", "Wody"]
friends.sort(by: >) 
print(friends)
// Prints "["Wody", "Steven", "Ryan", "Kio", "KangKyung", "James"]"

어떤 차이점인지 보이시나요?
sort() 의 기본정렬이 오름차순이기 때문에 sort(by: <) 와 같은 결과가 나옵니다.
sort(by: >) 는 내림차순으로 정렬되는 걸 확인할 수 있네요.




sorted()

Returns the elements of the sequence, sorted.

정렬된 수열(sequence) 의 요소를 반환합니다.


선언 (Declaration)

func sorted() -> [Element]

공식문서에 따르면 위와 같이 선언되어 있고,
Collection Types의 요소가 Comparable 를 준수할 때 사용 가능합니다.


리턴 타입 (Return Value)

  • sort() 와는 다르게 Reture Value 가 존재합니다.
  • sorted()수열(sequence) 요소의 정렬된 배열입니다.

예시 (Discussion)

예시를 통해 무슨 말인지 알아볼까요?
sorted() 의 기본 정렬도 오름차순입니다.
다음과 같은 연산자 <, > 를 통해 정렬 형태를 지정하는 것도 가능합니다.

  • sorted() - 오름차순
  • sorted(by: <) - 오름차순
  • sorted(by: >) - 내림차순

sorted()

// 오름차순 정렬
var friends = ["Steven", "Kio", "Ryan", "KangKyung", "James", "Wody"]
let sortedFriends = friends.sorted()
print(sortedFriends)
// Prints "["James", "KangKyung", "Kio", "Ryan", "Steven", "Wody"]"

sorted(by: <)

// 오름차순 정렬
var friends = ["Steven", "Kio", "Ryan", "KangKyung", "James", "Wody"]
let sortedFriends = friends.sorted(by: <)
print(sortedFriends)
// Prints "["James", "KangKyung", "Kio", "Ryan", "Steven", "Wody"]"

sorted(by: >)

// 내림차순 정렬
var friends = ["Steven", "Kio", "Ryan", "KangKyung", "James", "Wody"]
let sortedFriends = friends.sorted(by: >)
print(sortedFriends)
// Prints "["Wody", "Steven", "Ryan", "Kio", "KangKyung", "James"]"

sorted() 는 위의 예시처럼 정렬된 요소를 변수에 할당하여 사용가능합니다.
sorted() 의 기본값이 오름차순이기 때문에 굳이 sorted(by: <) 를 사용하지 않아도 상관 없습니다.




sort(), sorted() 차이점

그렇다면 sort()sorted() 의 차이점은 무엇일까요?

  • ed의 차이??? 😱 😱 😱

sort()

  • sort() 는 위에서 설명한 것처럼 원본 배열을 정렬합니다.
  • sorted() 와는 다르게 원본 배열을 정렬하기 때문에 변수에 할당이 불가능합니다.

sorted()

  • sorted() 는 원본 배열은 건드리지 않고, 정렬한 배열을 사본으로 만들어 사용이 가능합니다.
  • 그런 점에서 꼭 변수에 할당을 해줘야 사용할 수 있어요.
  • 변수에 할당해주면 배열이 하나 더 생기는 것이니 메모리는 많이 사용하게 되겠죠?




마치면서

sort()sorted() 에 대해 알아보았습니다.
어떤 메서드가 원본을 정렬 하고 정렬한 배열의 사본을 생성 하는 지에 대해
차이점을 기억해두면 앞으로 헷갈리지 않으실 겁니다 🥰

  • sort()
  • sort(by:)
  • sorted()
  • sorted(by:)




참고

sort() - developer.apple
sort(by:) - developer.apple
sorted() - developer.apple
sorted(by:) - developer.apple




잘못된 정보가 있으면 언제든 코멘트 부탁드립니다 👻

profile
Someday_iOS_Dev

0개의 댓글