Mam coś takiego w szybkim:

var users = [[craig, 3], [bobbie, 6], [nygel, 3], [caroline, 8]]

I chcę posortować listę według drugiego elementu na liście (tj. kolejność powinna wyglądać następująco: [[caroline, 8], [bobbie, 6], [craig, 3], [nygel, 3]]

Jak mogę to zrobić?

Dzięki!

0
Evan 1 kwiecień 2020, 10:36

3 odpowiedzi

Najlepsza odpowiedź

Możesz użyć last, rzutowania i wartości domyślnych do sortowania

users.sort(by: { $0.last as? Int ?? Int.min > $1.last as? Int ?? Int.min })
1
Joakim Danielson 1 kwiecień 2020, 08:03
users.sort(by: {$0[1] as? Int ?? 0 > $1[1] as? Int ?? 0})

//[caroline, 8], [bobbie, 6], [craig, 3], [nygel, 3]]
1
Dilan 1 kwiecień 2020, 08:04

Nie wiem, dlaczego używasz Array łączącego String i Int, może rozważ użycie struktury takiej jak w moim przykładzie. W przeciwnym razie inni już opublikowali działające rozwiązania.

struct User{
    let name: String
    let prio: Int
    init(_ name:String, _ prio:Int) {
        self.name = name
        self.prio = prio
    }
}

var users: [User] = [User("craig", 3), User("bobbie", 6), User("nygel", 3), User("caroline", 8)]

users.sort(by: {$0.prio > $1.prio})
0
Deitsch 1 kwiecień 2020, 08:17