[Résolu] Diviser un Array en Arrays en deux dimension
iLandes
Membre
Bonjour,
J'ai le code suivant :
import UIKit
class Student: CustomStringConvertible {
var name: String
var level: String
var description: String {
return "\(level): \(name)"
}
init (name: String, level: String) {
self.name = name
self.level = level
}
}
var students:[Student] = []
students.append(Student(name: "AAA", level: "CC"))
students.append(Student(name: "BBB", level: "CC"))
students.append(Student(name: "CCC", level: "AA"))
students.append(Student(name: "DDD", level: "CC"))
students.append(Student(name: "EEE", level: "AA"))
students.append(Student(name: "FFF", level: "CC"))
students.append(Student(name: "GGG", level: "BB"))
let studentsByLevel = students.sorted { (a, b) -> Bool in
a.level < b.level
}
print (studentsByLevel)
Je souhaiterai de manière élégante transformer tableau d'étudiants en tableau à deux dimensions en les regroupant par niveau. Pour obtenir quelque chose comme ça :
[[AA: CCC, AA: EEE],[BB: GGG], [CC: AAA, CC: BBB, CC: DDD, CC: FFF]]
Ne faite pas attention aux deux points, ils font parti de la description de la classe étudiant.
D'avance merci pour votre collaboration.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Merci Draken pour ta proposition.
J'y avais pensé mais cette solution suppose que l'on connaisse déjà les niveaux qui existent
Bonjour,
Pour connaà®tre les niveaux, quelque chose comme Set(students.map{$0.level}) devrait faire l'affaire ? (je ne suis pas devant xCode ou Playgrounds) et ne peux tester !
Et ensuite, une boucle avec la proposition de Draken pour chaque niveau,
Cordialement,
Nicolas
Absolument. J'allais le suggérer pour compléter ma proposition initiale
Ca fonctionne merci Draken !
Voici le code définitif pour ceux que ça intéresse:
Console :
AlleÌ pour rigoler :
On rigole mais ça compile pas, acc est immutable
;D
Pyroh, pourquoi ce lazy ?
EDIT : ok, je viens de lire la doc. C'est un attribut " sécurisé " du tableau à utiliser quand on exécute une chaà®ne d'opérations complexe impliquant des .map, .filter et .reduce imbriqués les uns dans les autres. C'est clair que cette imbrication doit bien " secouer" la mémoire !
Mais si, ça marche. Je viens de tester avec Xcode 9. Tu es encore sous Xcode 8 et Swift 3 ?
EDIT : Je confirme, cela ne fonctionne pas avec Swift 3 et Xcode 8. C'est du pur Swift 4.
Xcode8, swift 3
Apple est passé officiellement à Xcode 9 depuis .. cette nuit ! Tu dois avoir un petit badge rouge sur l'icône de l'AppStore.
Comme Draken l'a dit c'est du Swift 4.0 donc Xcode 9 est requis.
Pour Swift 3.1 ceci devrait compiler :
Pour ce qui est du lazy je suis pas sur de son utiliteÌ avec reduce mais c'est à veÌrifier et une chose est suÌ‚re c'est que ça ne mange pas de pain.