Swift Language
Ensembles
Recherche…
Déclarations
Les ensembles sont des collections non ordonnées de valeurs uniques. Les valeurs uniques doivent être du même type.
var colors = Set<String>()
Vous pouvez déclarer un ensemble avec des valeurs en utilisant la syntaxe littérale du tableau.
var favoriteColors: Set<String> = ["Red", "Blue", "Green", "Blue"]
// {"Blue", "Green", "Red"}
Modification de valeurs dans un ensemble
var favoriteColors: Set = ["Red", "Blue", "Green"]
//favoriteColors = {"Blue", "Green", "Red"}
Vous pouvez utiliser la méthode insert(_:)
pour ajouter un nouvel élément dans un ensemble.
favoriteColors.insert("Orange")
//favoriteColors = {"Red", "Green", "Orange", "Blue"}
Vous pouvez utiliser la méthode remove(_:)
pour supprimer un élément d'un ensemble. Il renvoie une valeur contenant facultative qui a été supprimée ou nulle si la valeur ne figurait pas dans l'ensemble.
let removedColor = favoriteColors.remove("Red")
//favoriteColors = {"Green", "Orange", "Blue"}
// removedColor = Optional("Red")
let anotherRemovedColor = favoriteColors.remove("Black")
// anotherRemovedColor = nil
Vérifier si un ensemble contient une valeur
var favoriteColors: Set = ["Red", "Blue", "Green"]
//favoriteColors = {"Blue", "Green", "Red"}
Vous pouvez utiliser la méthode contains(_:)
pour vérifier si un ensemble contient une valeur. Il retournera true si l'ensemble contient cette valeur.
if favoriteColors.contains("Blue") {
print("Who doesn't like blue!")
}
// Prints "Who doesn't like blue!"
Effectuer des opérations sur des ensembles
Valeurs communes aux deux ensembles:
Vous pouvez utiliser la méthode intersect(_:)
pour créer un nouvel ensemble contenant toutes les valeurs communes aux deux ensembles.
let favoriteColors: Set = ["Red", "Blue", "Green"]
let newColors: Set = ["Purple", "Orange", "Green"]
let intersect = favoriteColors.intersect(newColors) // a AND b
// intersect = {"Green"}
Toutes les valeurs de chaque ensemble:
Vous pouvez utiliser la méthode union(_:)
pour créer un nouvel ensemble contenant toutes les valeurs uniques de chaque ensemble.
let union = favoriteColors.union(newColors) // a OR b
// union = {"Red", "Purple", "Green", "Orange", "Blue"}
Notez que la valeur "Vert" n'apparaît qu'une seule fois dans le nouvel ensemble.
Des valeurs qui n'existent pas dans les deux ensembles:
Vous pouvez utiliser la méthode exclusiveOr(_:)
pour créer un nouvel ensemble contenant les valeurs uniques des deux ensembles, mais pas des deux.
let exclusiveOr = favoriteColors.exclusiveOr(newColors) // a XOR b
// exclusiveOr = {"Red", "Purple", "Orange", "Blue"}
Remarquez que la valeur "Green" n'apparaît pas dans le nouvel ensemble, car elle figurait dans les deux ensembles.
Valeurs qui ne sont pas dans un ensemble:
Vous pouvez utiliser la méthode de subtract(_:)
pour créer un nouvel ensemble contenant des valeurs qui ne figurent pas dans un ensemble spécifique.
let subtract = favoriteColors.subtract(newColors) // a - (a AND b)
// subtract = {"Blue", "Red"}
Remarquez que la valeur "Green" n'apparaît pas dans le nouvel ensemble, car elle figurait également dans le deuxième ensemble.
Ajout de valeurs de mon propre type à un ensemble
Afin de définir un Set
de votre propre type, vous devez Hashable
votre type à Hashable
struct Starship: Hashable {
let name: String
var hashValue: Int { return name.hashValue }
}
func ==(left:Starship, right: Starship) -> Bool {
return left.name == right.name
}
Maintenant, vous pouvez créer un Set
de Starship(s)
let ships : Set<Starship> = [Starship(name:"Enterprise D"), Starship(name:"Voyager"), Starship(name:"Defiant") ]
CountedSet
Swift 3 introduit la classe CountedSet
(c'est la version Swift de la NSCountedSet
Objective-C).
CountedSet, tel que suggéré par le nom, conserve le nombre de fois qu'une valeur est présente.
let countedSet = CountedSet()
countedSet.add(1)
countedSet.add(1)
countedSet.add(1)
countedSet.add(2)
countedSet.count(for: 1) // 3
countedSet.count(for: 2) // 1