Extraire les valeurs uniques d'un tableau
iLandes
Membre
Bonjour,
Je cherche à extraire la liste des catégories contenu dans un tableau de podcast. Chaque podcast à un nom, une, date etc. et biensur une catégorie.
J'ai ce code qui fonctionne
func listOfCategory() -> [String] {
var uniqueCategory: [String] = []
for podcast in podcasts {
var isNewCategory = true
for otherCategory in uniqueCategory {
if let _category = podcast.category {
if _category == otherCategory {
isNewCategory = false
break
}
}
}
if isNewCategory {
if let _category = podcast.category {
uniqueCategory.append(_category)
}
}
}
return uniqueCategory
}
J'aimerai faire un truc plus swifty. J'ai trouvé pour un tableau simple un code beaucoup plus swift qui fonctionne pour un tableau simple :
extension Array where Element: Hashable {
var setValue: Set<Element> {
return Set<Element>(self)
}
}
Ca marche, c'est beau comme du swift. Ca donne :
let names = ["John","Mary","Steve","Mary"]
let uniqueNames = names.setValue // {"John", "Mary", "Steve"}
J'aimerai adapter ce code à mon tableau de podcast mais je sèche un peu.
D'avance merci pour votre aide
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je ne parle pas Swift, mais si j'ai bien compris, tu veux la liste des categories (pour un affichage/filtre par example) et donc un unicité dans ce retour.
En Objective-C, je ferais donc ainsi : (note pas compilé, codé de tête)
Sachant qu'il y a un moyen très rapide de passer de NSSet à NSSArray au besoin.
Si par contre "podcast.category" est un optional ("String?") " ce qui semble finalement être le cas en relisant ton code " alors utiliser map va résulter en un tableau de String? et non plus un tableau de String évidemment. Ce qui n'est pas ce que tu veux.
Dans il suffit de remplacer "map" par "flatMap" qui fait la même chose que map sur un tableau, mais élimine les valeurs nil au passage.
Merci AliGator,
J'adore passer de plus de 20 lignes de codes à 3. Je teste cela en début de semaine prochaine !
Swift is Magic and Ali also.
La semaine dernière a durée 15 jours.
Merci à tous
A noter que j'ai changer le type de ma catégorie de String? en String.