์๋
ํ์ธ์ ์ ์ธ์
๋๋ค :)
์ด๋ฒ ๊ฒ์๊ธ์์๋ Swift์ ์ ๋ ฌ ๋ฉ์๋์ ๋ํด ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
์ ๋ ฌ ๋ฉ์๋์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ ์ ๋ฆฌ์ ๋๋ถ์ด ์ ๋ ฌ ์กฐ๊ฑด ์ค์ , ๋ค์ค ์ ๋ ฌ ๋ฑ ํ์ฉ ๋ฐฉ๋ฒ๊น์ง ์ด์ ๋ฆฌ๋ฅผ ํด๋ณด๊ณ ์ ์ ๋ชฉ์ ์ ๋ณตํ๊ธฐ๋ก ์ง์ด๋ณด์์ต๋๋ค ๐ ์ ๋ ฌ ๋ฉ์๋๋ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ์์๋ ๋ง์ด ํ์ฉ์ด ๋๋ ๋งํผ ํ์คํ ์ ๋ฆฌ๋ฅผ ํด๋๊ณ ๊ธฐ์ตํด๋ก์๋ค!!!
์ ๋ ฌ ๋ฉ์๋ ๋ค ๊ฐ์ง ๋น๊ต
๋จผ์ , ๊ณต์ ๋ฌธ์๋ฅผ ํตํด ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ๋ถํฐ ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ ๋ ฌ ๋ฉ์๋๋ ๊ณต์๋ฌธ์์ Array ๋ถ๋ถ์ ๋์์๋๋ฐ์, ๊ณต์ ๋ฌธ์์ ๋์์๋ ๋ค ๊ฐ์ง ๋ฉ์๋๋ฅผ ํ๋ฒ ์ดํด๋ด ์๋ค.
(์ ๋ ฌ ๋ฉ์๋๋ Array์์๋ง ์ฌ์ฉ๊ฐ๋ฅํ ๋ฉ์๋๋ ์๋๊ณ , RandomAccessCollection ํ๋กํ ์ฝ์ ์ค์ํ๋ ์ปฌ๋ ์ ํ์ ์ด๋ผ๋ฉด ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค!)
๋ ๊ฐ์ง ๊ธฐ์ค์ผ๋ก ๋๊ฐ์ฉ ๋ฌถ์ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
1. ์๋ณธ ์ํ์ค ๋ณ๊ฒฝ์ฌ๋ถ
- ์๋ณธ ์ํ์ค ์์ฒด๋ฅผ ์ ๋ ฌ๋ ์ํ์ค๋ก ๋ณ๊ฒฝ: sort(), sort(by: )
- ์๋ณธ ์ํ์ค๋ ๊ทธ๋๋ก ๋๊ณ ์ ๋ ฌ๋ ์๋ก์ด ์ํ์ค๋ฅผ ๋ฆฌํด: sorted(), sorted(by: )
sort()์ sort(by: ) ๋ฉ์๋๋ ์๋ณธ ์์ฒด๋ฅผ ์ ๋ ฌ๋ ์ํ์ค๋ก ๋ณ๊ฒฝํ๊ธฐ ํ๊ธฐ ๋๋ฌธ์ ํจ์์ ๋ฆฌํด ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค.
์ด์ ๋ฌ๋ฆฌ, sorted(), sorted(by: )๋ ์๋ณธ์ ๊ทธ๋๋ก ๋๊ณ ์ ๋ ฌ ๊ธฐ์ค์ ๋ฐ๋ผ ์ ๋ ฌํ ์๋ก์ด ์ํ์ค๋ฅผ ํจ์์ ๊ฒฐ๊ณผ ๊ฐ์ผ๋ก ๋ฐํํฉ๋๋ค.
์์๋ก ๊ฐ๋จํ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์๋๋ฐ์, ๋ ๋ฉ์๋์ ์ฐจ์ด์ ์ด ํ๋์ ๋ค์ด์ค๋ค์!
sort() ๋ฉ์๋ ์ฌ์ฉ ์ ํ๊ฐ์ง ์ฃผ์ํ ์ ์ mutable ์ปฌ๋ ์
์ ๋ํด์๋ง sort()๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. (์๋ณธ ์ปฌ๋ ์
์ ๋ณ๊ฒฝํ๋ ๋ฉ์๋์ด๋ ๋น์ฐํจ) ์์ ๊ฐ์ด let์ผ๋ก ์ ์ธํ ๋ฐฐ์ด์ sort()๋ฅผ ์ฌ์ฉํด์ฃผ๋ ์๋ฌ๋ฅผ ๋ฑ์ด๋ด๊ฒ ๋ฉ๋๋ค!
2. ์ ๋ ฌ ๊ธฐ์ค ์ ์ ๋ฐฉ๋ฒ
- Element๊ฐ Comparable ํ๋กํ ์ฝ ์ค์: sort(), sorted()
- (Element, Element) -> Bool ํด๋ก์ ๋ก ์ ๋ฌ: sort(by: ), sorted(by: )
์ด๋ฒ์ ์ ๋ ฌ ๊ธฐ์ค ์ ์ ๋ฐฉ๋ฒ์ ๊ธฐ์ค์ผ๋ก ๋น๊ตํด๋ด ์๋ค!
"Available when Element conforms to Comparable."
sort()์ sorted() ๋ฉ์๋๋ ์์๊ฐ Comparable ํ๋กํ ์ฝ์ ์ค์ํ๋ ํ์ ์ผ ๋ ์ฌ์ฉ๊ฐ๋ฅํ ๋ฉ์๋์ธ๋ฐ์,
Comparable ํ๋กํ ์ฝ์ด๋? ๋ง ๊ทธ๋๋ก '๋น๊ต๊ฐ๋ฅํ' ํ์ ์ด๋ผ๋ ๋ป์ ๋๋ค.
์ด๋ฅผ ์ค์ํ๋ ํ์ ์ ๋น๊ต์ฐ์ฐ์(<, <=, >=, >)๋ฅผ ์ฌ์ฉํด ๋น๊ต๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
(๐ฝ ๋ ์์ธํ ๋ด์ฉ์ ์๋ ๊ณต์๋ฌธ์ ์ฐธ๊ณ !)
Comparable์ ์ค์ํ๋ ๋น๊ต๊ฐ๋ฅํ ์์๋ค๋ก ์ด๋ฃจ์ด์ง ์ปฌ๋ ์ ์ sort(), sorted() ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด ์ปฌ๋ ์ ์์๋ค์ ์์ ๊ฐ์ด ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ฉ๋๋ค.(Int, String ๋ชจ๋ Comparable ์ค์ ํ์ )
< ์ฐ์ฐ์๊ฐ ์ ์ฉ๋ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ด default์ด๊ณ , ๋ค๋ฅธ ์ ๋ ฌ ๊ธฐ์ค์ ์ ์ฉํด์ฃผ๊ณ ์ถ๋ค๋ฉด by ํ๋ผ๋ฏธํฐ๋ก ์ ๋ ฌ ๊ธฐ์ค์ ์ค์ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฅ ๊ฐ๋จํ๊ฒ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ์ํ๋ค๋ฉด sort()๋ sorted()๋ฅผ ์ฌ์ฉํด์ฃผ๋ฉด ๋๋ค๋ ๊ฒ!
(Element, Element) -> Bool ํด๋ก์
์ค๋ฆ์ฐจ์ ์ ๋ ฌ ์ด์ธ์ ๋ค๋ฅธ ์ ๋ ฌ ๊ธฐ์ค์ ์ค์ ํ๊ณ ์ถ์ ๋, ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋๊ฐ sort(by:), sorted(by:) ๋ ๊ฐ์ง ๋ฉ์๋ ์ ๋๋ค.
by๋ผ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์ด์ฉํด ์ ๋ ฌ ๊ธฐ์ค์ ์ค์ ํด์ค ์ ์๋๋ฐ์, ์ด ํ๋ผ๋ฏธํฐ๋ก๋ ํด๋ก์ ๊ฐ ์ ๋ฌ๋ฉ๋๋ค!
ํด๋ก์ ๋ (Element, Element) -> Bool ์ด๋ฌํ ํํ๋ก, ๋ ๊ฐ์ ์ธ์๋ฅผ ๊ฐ์ง๊ณ Bool ํ์ ์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
์ด ๋ฐํ ๊ฐ์ ์ฒซ ๋ฒ์งธ ์ธ์๊ฐ ๋ ๋ฒ์งธ ์ธ์๋ณด๋ค ๋จผ์ ์ ๋ ฌ๋์ด์ผ ํ๋์ง ์ฌ๋ถ๋ฅผ ๋ฐํํฉ๋๋ค.
์ฆ, ์ฒซ ๋ฒ์งธ ์ธ์๊ฐ ๋๋ฒ์งธ ์ธ์๋ณด๋ค ๋จผ์ ์ ๋ ฌ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ true๋ฅผ, ๋ฐ๋์ ๊ฒฝ์ฐ false๋ฅผ ๋ฆฌํดํ๊ฒ ๋๋ ๊ฒ์ ๋๋ค.
๊ฐ๋จํ ๋ฐฐ์ด์ ์ ๋ ฌ ๊ณผ์ ์์ ํด๋ก์ ์ ์ธ์๋ก ์ด๋ค ์์๊ฐ ์ ๋ฌ๋๋์ง, ์ด๋ค ๊ฐ์ด ๋ฐํ๋๋์ง ์ดํด๋ด ์๋ค!
ํด๋ก์ ์ ์ธ์๋ก ๋ฐฐ์ด์ ์์์ ๋ถํฐ ๋ ๊ฐ ์์์ฉ ์ ๋ฌ์ด ๋๊ณ (index0, index1์ ์์ํ๋๋ฐ ์์๊ฐ ๋ฐ๋์ด์ index1, index0 ์ด๋ฐ์์ผ๋ก ์ ๋ฌ๋๋ค์?) ์ค์ ํ ์กฐ๊ฑด์ ๋ฐ๋ผ Bool ํ์ ์์๊ฐ ๋ฐํ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
a < b๋ฅผ ๋ง์กฑํ๋ค๋ฉด true, ์๋๋ผ๋ฉด false๊ฐ ๋ฆฌํด๋๊ณ ์๋๋ฐ,
์ธ๋ฑ์ค ๋ฒํธ๊ฐ ํฐ ์์๊ฐ a์ ์ ๋ฌ๋๋ true์ธ ๊ฒฝ์ฐ ์์์ ์์๊ฐ ๋ฐ๋๊ฒ ๋ค์!
(์ธ๋ฒ์งธ ๋น๊ต์์ true ๋ฆฌํด ์ดํ ๋ค๋ฒ์งธ ๋น๊ต์์ ํด๋ก์ ์ธ์๋ก ์ ๋ฌ๋๋ ๊ฐ์ ํ์ธํด๋ณด๋ฉด ์์๊ฐ ๋ฐ๋๊ณ ์์ ๊ฐ์ธ 2์ ๋ค์ ํ๋ฒ ๋น๊ต)
ํด๋ก์ ํํ๋ก ์ ๋ฌ๋๋ ์ ๋ ฌ ๊ธฐ์ค์ด ์ ์ฉ๋๋ ์๋ฆฌ๊ฐ ์ดํด๋์๋์?
๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๊ฐ ํ๋์ด๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ด ํ๋ผ๋ฏธํฐ ์ด๋ฆ ์๋ต ํ ํํ ํด๋ก์ ๋ก๋ ํํ์ด ๊ฐ๋ฅํ๊ณ , ํด๋ก์ ๊ฒฝ๋ ๋ฌธ๋ฒ์ ์ ์ฉํด ์๋ตํด์ ์๋์ ๊ฐ์ด ๊ฐ๋จํ๊ฒ ํํ๋ ๋น์ฐํ ๊ฐ๋ฅํฉ๋๋ค!!
ํด๋ก์ ๋ฅผ ์ด์ฉํ ๋ค์ํ ์ ๋ ฌ ๊ธฐ์ค ์ค์ ๋ฐ ๋ค์ค ์ ๋ ฌ
์ฌ์ค ๋จ์ํ ์ค๋ฆ์ฐจ์, ๋ด๋ฆผ์ฐจ์ ๋ณด๋ค ์ํ๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ ๋ ฌํ๊ณ ์ถ์ ๋๊ฐ ๋ ๋ง์ฃ ?? (์๋ ๋ง๊ตฌ)
ํด๋ก์ ๋ฅผ ์ด์ฉํด ์ํ๋ ์ ๋ ฌ ๊ธฐ์ค ์ค์ ํ๋ ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ์ข ๋ ๋ณต์กํ๊ฒ ์ฌ๋ฌ ๊ฐ ์ ๋ ฌ ๊ธฐ์ค์ ์ฐ์ ์์์ ๋ฐ๋ผ ์ ์ฉํ๋ ๋ค์ค ์ ๋ ฌ ๋ฐฉ๋ฒ์ ๋ํด์๋ ์์๋ด ์๋ค!
๋ค์ํ ์ ๋ ฌ ๊ธฐ์ค ์ค์ ํด๋ณด๊ธฐ
1. ๊ธ์ ์ ๊ธฐ์ค ์ ๋ ฌ
์์์ ๋ดค๋ student ๋ฐฐ์ด์ ์ํ๋ฒณ ์์ด ์๋, ๊ธ์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํด๋ณด๋ฉด, ์๋์ ๊ฐ์ด ์ด๋ฆ์ ๊ธธ์ด๊ฐ ์งง์ ํ์์ด ์์ ์ค๋๋ก ์ ๋ ฌํ ์ ์์ต๋๋ค.
var students = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
students.sort { $0.count < $1.count }
print(students) // ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
2. ์์ธ๊ฐ ์๋ ์ ๋ ฌ ์กฐ๊ฑด ์ค์
์์ธ ์ผ์ด์ค๊ฐ ์๋ ์ ๋ ฌ ์กฐ๊ฑด์ ์ค์ ํด๋ด ์๋ค.
์์ธ ์ผ์ด์ค๋ ์กฐ๊ฑด๋ฌธ์ ์ด์ฉํด ์ฒ๋ฆฌํด์ค ์ ์์ต๋๋ค.
arr = arr.sorted {
if $0[0].lowercased() == $1[0].lowercased() { // head๊ฐ ๊ฐ๋ค๋ฉด(๋์๋ฌธ์ ์ฐจ์ด ์ ์ธ)
if Int($0[1])! == Int($1[1])! { // number์ ์ซ์๋ ๊ฐ๋ค๋ฉด
return false // ์๋ ์
๋ ฅ์ ์ฃผ์ด์ง ์์ ์ ์ง
}
return Int($0[1])! < Int($1[1])! // ๋๋ฒ ์์ผ๋ก ์ ๋ ฌ
}
return $0[0].lowercased() < $1[0].lowercased() // ๋ํดํธ ์ ๋ ฌ ๊ธฐ์ค
}
์์ ์ฝ๋๋ ์นด์นด์ค ์ฝ๋ฉํ ์คํธ ๊ธฐ์ถ ๋ฌธ์ ์ธ <[3์ฐจ] ํ์ผ๋ช ์ ๋ ฌ> ๋ฌธ์ (์ ๋ ฌ ์ฐ์ตํ๊ธฐ ์ข์ ๋ฌธ์ !) ํ์ด์์ ๊ฐ์ ธ์จ ์ฝ๋์ธ๋ฐ์,
๊ธฐ๋ณธ ์ ๋ ฌ ๊ธฐ์ค์ด ์กด์ฌํ์ง๋ง ์์ธ ์ผ์ด์ค์ ํํด์๋ง ํน์ ์กฐ๊ฑด์ ๊ฑธ์ด์ฃผ๊ณ ์ถ์ ๋ ์์ ๊ฐ์ด if๋ฌธ์ ์ฌ์ฉํด์ ์กฐ๊ฑด์ ์ค์ ์ ํด์ค ์ ์์ต๋๋ค! ์์์ true๊ฐ ๋ฐํ๋๋ ๊ฒฝ์ฐ ์์๊ฐ ๋ฐ๋๋ ๊ฒ์ ํ์ธํ์ฃ ?? ๋ฐ๋๋ก ํน์ ๊ฒฝ์ฐ์๋ง ์๋ ์์๋ฅผ ์ ์ง(= ์ ๋ ฌ ์กฐ๊ฑด ์ ์ฉx)ํด์ฃผ๊ณ ์ถ๋ค๋ฉด false๋ฅผ ๋ฆฌํดํด์ฃผ๋๋ก ํ๋ฉด ๋ฉ๋๋ค!
๋ค์ค ์ ๋ ฌ
let cards = [["2", "D"], ["1", "C"], ["8", "A"], ["5", "B"], ["4", "A"]]
var sortedCards = cards.sorted {
return $0[1] < $1[1] || $0[0] > $1[0]
}
// 1์์: ์ํ๋ฒณ ์
// 2์์: ์ซ์ ๊ธฐ์ค ๋ด๋ฆผ์ฐจ์
print(sortedCards) // [["8", "A"], ["4", "A"], ["5", "B"], ["1", "C"], ["2", "D"]]
์ฌ๋ฌ ์กฐ๊ฑด์ ์ ์ฉํ๋๋ฐ, ์กฐ๊ฑด์ ์ฐ์ ์์๋ฅผ ๋๊ณ ์ ๋ ฌํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ or ์ฐ์ฐ์(||)๋ฅผ ์ด์ฉํ๋ฉด ๋ฉ๋๋ค!
2์ฐจ์ ์ด์์ ๋ฐฐ์ด์์ ๋ค์ค ์ ๋ ฌ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๊ฒ ๊ฐ์๋ฐ์, ์์ ์์ ์ฒ๋ผ ์ฌ๋ฌ ๊ฐ์ ์กฐ๊ฑด์ ์ฐ์ ์์๊ฐ ๋์ ์์๋๋ก || ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ๋์ดํด์ฃผ๋ฉด ๋ฉ๋๋ค.
์ ์์ ์ฝ๋์ ๊ฒฝ์ฐ, index 0์๋ ์ซ์๊ฐ, index 1์๋ ๋ฌธ์๊ฐ ์๋ ์นด๋๊ฐ ์ฌ๋ฌ๊ฐ ๋ด๊ฒจ์๋ 2์ฐจ์ ๋ฐฐ์ด์ธ cards๋ฅผ ์ ๋ ฌํด์ฃผ๋ ์์ ์ ๋๋ค. ์ ๋ ฌ ์กฐ๊ฑด์ ์ํ๋ฒณ ์์ผ๋ก ์ฐ์ ์ ๋ ฌํ๊ณ , ๊ทธ ๋ค์ ์์ ๊ธฐ์ค ๋ด๋ฆผ์ฐจ์(์ซ์๊ฐ ํฐ ์นด๋๊ฐ ์์ ์ค๋๋ก)์ ๋๋ค.
ํ๋ฆฐํธ๋ฅผ ํ์ธํ๋ฉด ์ํ๋ฒณ ์์ผ๋ก ๋จผ์ ์ ๋ ฌ๋๊ณ , ์ํ๋ฒณ์ด ๊ฐ์ ๊ฒฝ์ฐ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ด ์ ์ฉ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
'๐ iOS > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Generic (2) | 2023.11.28 |
---|---|
[Swift] Optional (1) | 2023.11.22 |
[Swift] ํ๋กํผํฐ(Properties) - ํ์ ํ๋กํผํฐ (0) | 2023.04.02 |
[Swift] ํ๋กํผํฐ(Properties) - ํ๋กํผํฐ ์ต์ ๋ฒ (0) | 2023.04.02 |
[Swift] ํ๋กํผํฐ(Properties) - ์ ์ฅ ํ๋กํผํฐ, ์ฐ์ฐ ํ๋กํผํฐ (2) | 2023.04.01 |