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

3.0

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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow