Spécifiez plusieurs conditions de tri dans Swift

Quand j'ai voulu spécifier deux conditions de tri, je me demandais comment l'écrire pendant environ une heure. Il n'y a pas d'article similaire dans Qiita, et surtout, j'ai été impressionné par "Je devrais écrire comme ça !!", alors partagez-le.

import Foundation

// Structure qui supporte le poids et la taille
struct Person {
   let seq: Int
   let weight: Int
   let height: Int
   init(seq: Int, weight w: Int, height h: Int) {
       self.seq = seq
       self.weight = w
       self.height = h
   }
}

func sortTest() {
// Créer des données de test
// Nombre de personnes
   let N = 10
   let w = [50, 42, 69, 80, 79, 81, 70, 53, 59, 50]
   let h = [184, 170, 170, 169, 193, 154, 147, 180 ,170, 171]
   let personDate = (0..<N).map {
       Person(seq: $0, weight: w[$0], height: h[$0])
   }
   
print ("____________ avant le tri")
   _ = personDate.map {
print ("Numéro d'identification \ ($ 0.seq), Hauteur: \ ($ 0.height), Poids: \ ($ 0.weight)")
   }
   
// Première condition: le plus court d'abord
// Deuxième condition: si la hauteur est la même, trier par ordre croissant de poids
   let sortedPersonDate = personDate.sorted {
       if $0.height != $1.height { return $0.height < $1.height }
       else {
           return $0.weight < $1.weight
       }
   }
   
print ("__________________ Après le tri")
   _ = sortedPersonDate.map {
print ("Numéro d'identification \ ($ 0.seq), Hauteur: \ ($ 0.height), Poids: \ ($ 0.weight)")
   }
}

____________________ Avant de trier
Numéro d'identification 0, hauteur: 184, poids: 50
Numéro d'identification 1, Hauteur: 170, Poids: 42
Numéro d'identification 2, hauteur: 170, poids: 69
Numéro d'identification 3, hauteur: 169, poids: 80
Numéro d'identification 4, hauteur: 193, poids: 79
Numéro d'identification 5, hauteur: 154, poids: 81
Numéro d'identification 6, hauteur: 147, poids: 70
Numéro d'identification 7, hauteur: 180, poids: 53
Numéro d'identification 8, hauteur: 170, poids: 59
Numéro d'identification 9, hauteur: 171, poids: 50
____________________ Après le tri
Numéro d'identification 6, hauteur: 147, poids: 70
Numéro d'identification 5, hauteur: 154, poids: 81
Numéro d'identification 3, hauteur: 169, poids: 80
Numéro d'identification 1, Hauteur: 170, Poids: 42
Numéro d'identification 8, hauteur: 170, poids: 59
Numéro d'identification 2, hauteur: 170, poids: 69
Numéro d'identification 9, hauteur: 171, poids: 50
Numéro d'identification 7, hauteur: 180, poids: 53
Numéro d'identification 0, hauteur: 184, poids: 50
Numéro d'identification 4, hauteur: 193, poids: 79

Recommended Posts

Spécifiez plusieurs conditions de tri dans Swift
[swift5] Comment spécifier la couleur en hexadécimal
Trier par plusieurs conditions à l'aide de Java Stream
Trier par plusieurs champs dans la classe
Divide devient 0 dans Swift
Tableau multidimensionnel dans Swift
[Neta] Sleep Sort en Java
Photothèque avec Swift UI
Utilisez plusieurs cases à cocher dans Rails6!
Spécifiez le socket mysql dans Hanami
Swift: un piège pour définir plusieurs éléments initiaux dans un tableau