Swift/Swift BASIC

[Swift] μŠ€μœ„ν”„νŠΈ μ •λ ¬ sorted() 와 sort() 차이점

감자 πŸ₯” 2022. 2. 19. 12:43
λ°˜μ‘ν˜•

 

μ•ˆλ…•ν•˜μ„Έμš”, κ°μžμž…λ‹ˆλ‹€. μŠ€μœ„ν”„νŠΈμ—μ„œλŠ” 기본적으둜 λ°°μ—΄μ΄λ‚˜ λ¬Έμžμ—΄ 등을 μ •λ ¬ν•΄μ£ΌλŠ” λ©”μ„œλ“œ sort κΈ°λŠ₯을 μ§€μ›ν•˜λŠ”λ°μš”. sort()와 sorted() 두가지가 μžˆμŠ΅λ‹ˆλ‹€. λ‘κ°€μ§€μ˜ 차이점에 λŒ€ν•΄μ„œ 자꾸자꾸 κΉŒλ¨Ήμ–΄μ„œ μ •λ¦¬ν•΄λ³΄λ €κ³ ν•©λ‹ˆλ‹€.

 

1. sort(by: )

λ¨Όμ € sort(by: ) λ©”μ„œλ“œλŠ” 기본적으둜 μ˜€λ¦„μ°¨μˆœ 정렬을 μ§€μ›ν•©λ‹ˆλ‹€.  λ‚΄λ¦Όμ°¨μˆœ 정렬을 μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄, sorted(by: >) λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

var arr = [133, 2, 321, 5423, 4]
arr.sort()
print(arr) // [2, 4, 133, 321, 5423]

arr.sort(by: >)
print(arr) // [5423, 321, 133, 4, 2]

sort() λ©”μ„œλ“œλŠ” μ œμžλ¦¬μ—μ„œ μ •λ ¬ν•˜κΈ° λ•Œλ¬Έμ— arr.sort()ν•˜λ©΄ μ •λ ¬λœ 배열이 λ‹€μ‹œ return λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
(ν•΄λ‹Ή λ©”μ„œλ“œμ˜ μ‹œκ°„λ³΅μž‘λ„λŠ” O(nlogn)이고 n은 collection의 길이)

 

2. sorted(by: )

sorted(by: ) λ©”μ„œλ“œλ„ λ§ˆμ°¬κ°€μ§€λ‘œ μ˜€λ¦„μ°¨μˆœμ„ μ§€μ›ν•˜λ©°, sorted(by: >)λ₯Ό μ‚¬μš©ν•˜λ©΄ λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ‚¬μš©κ°€λŠ₯ν•©λ‹ˆλ‹€. sorted() λ©”μ„œλ“œλŠ” μΆ”κ°€λ‘œ, μ •λ ¬λœ 배열을 λ‹€μ‹œ λ¦¬ν„΄ν•΄μ€€λ‹€λŠ” μ μ—μ„œ sort와 차이점이 μžˆμŠ΅λ‹ˆλ‹€.

var arr = [133, 2, 321, 5423, 4]
arr.sorted()
print(arr) // [133, 2, 321, 5423, 4]

μœ„ μ½”λ“œλ₯Ό 보면, sorted() ν•΄μ„œ 정렬을 ν–ˆμ§€λ§Œ, μ •λ ¬λœ 배열을 return 만 ν•˜κ³ , arr 자체λ₯Ό μ •λ ¬ν•΄μ„œ μ‚¬μš©ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— arrλ₯Ό 좜λ ₯해보면, μ²˜μŒμ— μ •μ˜λœ κ·ΈλŒ€λ‘œ 좜λ ₯λ©λ‹ˆλ‹€. λ”°λΌμ„œ sorted() λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„ , μƒˆλ‘œμš΄ λ³€μˆ˜μ— μ €μž₯ν•΄μ„œ μ‚¬μš©ν•˜λŠ” 방식을 μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€. 

var arr = [133, 2, 321, 5423, 4]
var newArr = arr.sorted()
print(newArr) //[2, 4, 133, 321, 5423]

μ‹œκ°„ λ³΅μž‘λ„λŠ” sort() λ©”μ„œλ“œμ™€ λ™μΌν•©λ‹ˆλ‹€.

 

λ‹€μ‹œ μ •λ¦¬ν•˜μžλ©΄, sort() λŠ” λ°°μ—΄ 자체λ₯Ό μ •λ ¬, sorted() λŠ” μ •λ ¬λœ 배열을 μƒˆλ‘­κ²Œ 리턴 ν•΄μ€Œ. μ΄λ ‡κ²Œ 차이가 μžˆμŠ΅λ‹ˆλ‹€. λ°°μ—΄μ˜ μˆœμ„œκ°€ μ€‘μš”ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ, sort() λ₯Ό μ‚¬μš©ν•˜κ²Œ 되면 λ°°μ—΄μžμ²΄μ˜ μˆœμ„œλ₯Ό 바꿔버리기 λ•Œλ¬Έμ— μ‹¬κ°ν•œ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ sorted()λŠ” 값을 λ³΅μ œν•˜μ—¬ μƒˆλ‘œμš΄ 배열을 μƒμ„±ν•΄μ„œ λ¦¬ν„΄ν•˜κΈ° λ•Œλ¬Έμ—, λ©”λͺ¨λ¦¬κ°€ λ‘λ°°λ‘œ μ‚¬μš©λœλ‹€λŠ” 치λͺ…적인 단점이 μžˆμŠ΅λ‹ˆλ‹€. 

μ–΄λ–€ μƒν™©μ—μ„œ sorted / sort λ₯Ό μ‚¬μš©ν•˜λŠλƒμ— 따라 μ„±λŠ₯의 차이도 λ°œμƒν•˜κ² λ„€μš”. 

 

λ°˜μ‘ν˜•