HIT해

[Swift 기초문법 - 25] 고차함수 sort, sorted 정렬 본문

Swift/Swift 기초문법

[Swift 기초문법 - 25] 고차함수 sort, sorted 정렬

힛해 2024. 8. 14. 05:07
728x90

 

var MyArray = [ 3,4,6,1,7,247,245,24,5,6]

var ascendingArray = myArray.sorted()
// 오름 차순으로 정렬해줌

myArray.sort()
// 배열 자체를 정렬시켜줌

// 내림차순 정렬
var descendingArray = myArray.sorted(by:>)

 

sorted는 내가 정렬한 배열을 반환하는 것이고

sort는 나 자체를 정렬하는 것.

 

sort는 오름차순 by:> 내림차순

 

프로젝트 사용예시

구조체간 비교가 필요한 경우 컬렉션 타입이 아니기 때문애 따로 설정없이 sort를 하면 정렬이 되지 않는다.

 

struct Todo : Comparalble, Hashable { // Comparalble 로 비교가 가능하게 ,Hashable로 리스트에서 사용이 가능하게

	// 이게 정의되어 있어야 sort가 가능하다.
	static func < (lhs : Todo, rhs :Todo) -> Bool {
    	return ihs.id < rhs.id
    }
    
    var id : Int
    var title : String
        
}

 

import SwiftUI

struct ContentView: View {
    @State var todos : [Todo] = []
    
    @State var iAscending : Bool = true
    
    var getToggleTitle : (Bool) -> String = { isAscending in
        return isAscending ? "오름차순" : "내림차순"
    }
    
    var body: some View {
        VStack{
            Toggle(getToggleTitle , isOn : $isAscending)
            listContent
        }
        .onChange(of: isAscending, perform: { (changedValue : Bool) in
            print("changedValue: ", changedValue)
            if changedValue {
                self.todos.sort()
            }else{
                self.todos.sorted(by: >)
            }
        })
        .onAppear(perform: {
            self.todos = self.getDummyTodos()
            // VStack이 생성될때 더미값들이 들어오게 됨
        })
    }
}

//MARK : - 뷰
extension ContentView {
    var listContent some Vieww{
        List{
            ForEach(todos,id: \.self){ aTodo in
                Text(aTodo.title)
            }
        }
    }
}

//MARK: - Helpers
extension ContentView {
    func getDummyTodos () -> [Todo] {
        print ("getDummyTodos () called")
        var todos : [Todo] = []
        for i in 0...100 {
            let newTodo = Todo(id: i, title: "\(i) - EolE")
            todos.append(newTodo)
        }
        return todos
    }
}