English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Swift Sammlung (Set)

In diesem Tutorial werden Sie Mengen, die Erstellung von Mengen, die Änderung von Mengen und einige gängige Operationen in Mengen lernen.

Im vorherigen ArtikelSwift-ArrayIn diesem Artikel haben wir gelernt, wie man Arrays erstellt, die mehrere Werte in einer geordneten Liste enthalten können.

Aber wenn wir sicherstellen möchten, dass die Liste nur eindeutige Werte enthält, dann verwenden wir den Set in Swift.

Was ist eine Menge?

Eine Menge ist nur ein Behälter, in dem mehrere DatenTypen von Werten in einer unsortierten Liste gespeichert werden können, und sicherstellt, dass die Elemente im Behälter einzigartig sind (d.h. jedes Daten nur einmal vorkommt).

Eine unsortierte Liste bedeutet, dass Sie die Elemente nicht in der Reihenfolge erhalten können, in der sie in der Menge definiert sind.

Der Hauptvorteil der Verwendung von Mengen anstelle von Arrays besteht darin, dass Sie sicherstellen können, dass ein Element nur einmal vorkommt, und die Reihenfolge der Elemente nicht wichtig ist.

Die im Satz gespeicherten Werte müssen hashbar sein. Dies bedeutet, dass sie die Eigenschaft hashValue bereitstellen müssen. Dies ist wichtig, da Sätze unsortiert sind und sie hashValue verwenden, um auf die Elemente des Satzes zuzugreifen.

Standardmäßig sind alle grundlegenden Typen von Swift (wie String, Int, Double und Bool) hashbar und können als Wertetypen für Sätze verwendet werden. Aber Sie können auch in Swift Hash-Typen erstellen, die in Sätzen gespeichert werden können.

Wie kann man in Swift Sätze erklären?

Durch die Angabe des Typs als Set und die Angabe des Datentyps, der in <> gespeichert werden kann, kann auch ein leerer Satz erstellt werden.

Beispiel1:erklärt einen leeren Satz

let emptyIntSet:Set = []
print(emptyIntSet)

oder

let emptyIntSet:Set = Set()
print(emptyIntSet)

Wenn Sie das Programm ausführen, wird die Ausgabe wie folgt sein:

[ ]

Im obigen Programm haben wir eine Konstante emptyInt deklariert, die einen Satz speichern kann, mehrere Integerwerte und initialisiert wird mit dem Wert 0.

Da Swift eine Typinferenzsprache ist, können Sie auch einen Satz ohne angegebene Datentypen direkt erstellen, aber Sie müssen einige Werte verwenden, um den Compiler zu ermöglichen, seinen Typ zu inferieren:

Beispiel2:erklärt einen Satz mit bestimmten Werten

let someIntSet:Set = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(someIntSet)

Wenn Sie das Programm ausführen, wird die Ausgabe wie folgt sein:

[2, 4, 9, 5, 6, 7, 3, 1, 8]

Im obigen Programm haben wir eine Konstante someIntSet deklariert, die Integer-Sätze speichern kann, ohne dass eine explizite Typbezeichnung erforderlich ist. Aber wir müssen :Set hinzufügen, wenn wir die Variable definieren, sonst erstellt Swift eine Liste für uns.

Darüber hinaus verwenden wir als Array die eckigen Klammern [] 1、2、3、4、5、6、7、8、9 Werte initialisieren den Satz.

Sie wissen bereits, dass wenn Sie versuchen, den Wert im Set über print(someIntSet) auszugeben, Sie eine andere Reihenfolge erhalten, die sich von der Reihenfolge der in Ihrem Set definierten Elementen unterscheidet, da es keine festgelegte Reihenfolge gibt, wie die Werte im Set gespeichert werden. Daher ändert sich die Reihenfolge jedes Mal, wenn Sie darauf zugreifen.

Beispiel3:erklärt einen Satz mit wiederholten Werten

let someStrSet:Set = ["ab","bc","cd","de","ab"]
print(someStrSet)

Wenn Sie das Programm ausführen, wird die Ausgabe wie folgt sein:

["de", "ab", "cd", "bc"]

Sie wissen bereits, dass wenn Sie versuchen, den Wert im Set als Druck (someIntSet) abzugeben, im obigen Programm haben wir im Set einen wiederholten Wert ab definiert. Und. Wenn wir versuchen, den Wert im Set über print (someStrSet) abzugeben, werden die wiederholten Werte automatisch aus dem Set entfernt. Daher gewährleistet Set die Einzigartigkeit der Elemente darin/值。

Werte.

Sie können auch in Swift Mengen mit eigenen angepassten Hashable-Typen deklarieren.

Wie greift man in Swift auf Mengenelemente zu?
Man kann keine Index-Syntax verwenden, um Elemente der Menge wie Arrays zu Zugriffnahme. Dies liegt daran, dass Mengen unsortiert sind und keine Indexe zur Zugriffnahme auf Elemente haben.-Schleifen zur Zugriffnahme auf Mengenelemente.

Beispiel4: for...in-Zugriff auf Elemente der Menge

var someStrSet:Set = ["ab", "bc", "cd", "de"]
for val in someStrSet {
    print(val)
}

Wenn Sie das Programm ausführen, wird die Ausgabe wie folgt sein:

de
ab
cd
bc

Im obigen Programm ist der val unterschiedlich zur Reihenfolge der Elemente in der Menge, da Mengen und Arrays unterschiedlich sind und unsortiert sind.

Sie können auch Elemente der Menge direkt aus der Menge entfernen, wie folgt:

Beispiel5: Verwendung von remove() zur Zugriffnahme auf Elemente der Menge

var someStrSet:Set = ["ab", "bc", "cd", "de"]
let someVal = someStrSet.remove("cd")
print(someVal)
print(someStrSet)

Wenn Sie das Programm ausführen, wird die Ausgabe wie folgt sein:

Optional("cd")
["de", "ab", "bc"]

Im obigen Programm sehen Sie, dass der remove-Methode ein optionales String-Objekt zurückgegeben wird. Daher empfehlen wir, die folgenden Optional-Verarbeitungen durchzuführen. Weitere Informationen zu Optionals finden Sie unterSwift Optional.

Beispiel6: Optional-Verarbeitung von remove()

var someStrSet:Set = ["ab", "bc", "cd", "de"]
if let someVal = someStrSet.remove("cd") {
    print(someVal)
    print(someStrSet)
} else {
    print("cannot find element to remove")
}

Wenn Sie das Programm ausführen, wird die Ausgabe wie folgt sein:

cd
["de", "ab", "bc"]

Wie fügt man neue Elemente in die Menge ein?

Sie können die insert()-Methode in Swift verwenden, um neue Elemente in die Menge hinzuzufügen.

Beispiel7: Verwendung von insert() zur Hinzufügung neuer Elemente

var someStrSet:Set = ["ab", "bc", "cd", "de"]
someStrSet.insert("ef")
print(someStrSet)

Wenn Sie das Programm ausführen, wird die Ausgabe wie folgt sein:

["ab", "de", "cd", "ef", "bc"]

Im obigen Programm verwenden wir die insert()-Methode, um neue Elemente in die Menge einzufügen. Da Mengen unsortiert sind, ist der Einfügungsplatz unbekannt.

Mengenoperationen

Eine der Hauptvorteile der Verwendung von Mengen ist, dass man Mengenoperationen durchführen kann, wie z.B. die Kombination von zwei Mengen oder die Bestimmung der gemeinsamen Werte der Mengen. Diese Operationen ähneln den Mengenoperationen in der Mathematik.

1.并集

两个集合a和b的并集是在a或b中 或 在a和b两者中的元素的集合。

let a: Set = [1, 3, 5, 7, 9]
let b: Set = [0, 2, 4, 6, 8]
print(a.union(b))

Wenn Sie das obige Programm ausführen, wird die Ausgabe sein:

[8, 2, 9, 4, 5, 7, 6, 3, 1, 0]

2.交集

两个集合a和b的交集是包含a的所有元素的集合,这些元素同时也属于b。

let a: Set = [1, 3, 5, 7, 9]
let b: Set = [0, 3, 7, 6, 8]
print(a.intersection(b))

Wenn Sie das obige Programm ausführen, wird die Ausgabe sein:

[7, 3]

因此,print(a.intersection(b))输出一个新的集合,其值 [7、3] 在 a 和 b 集合中都存在。

3.差集

两个集合a和b的差集,它包含 a 的所有元素,但去掉同样属于 b 的元素。

let a: Set = [1, 3, 5, 7, 9]
let b: Set = [0, 3, 7, 6, 8]
print(a.subtracting(b))

Wenn Sie das obige Programm ausführen, wird die Ausgabe sein:

[5, 9, 1]

因此,print(a.subtracting(b)) 输出具有值[ 5,9,1] 的新集合。

4.对称差集

两个集合a和b的对称差是包含所有元素的集合,这些元素位于两个集合中的任何一个中,但不同时存在两个集合中。

let a: Set = [1, 3, 5, 7, 9]
let b: Set = [0, 3, 7, 6, 8]
print(a.symmetricDifference(b))

Wenn Sie das obige Programm ausführen, wird die Ausgabe sein:

[5, 6, 8, 0, 1, 9]

因此,print(a.symmetricDifference(b)) 输出具有值[ 5、6、8、0、1、9] 的新集合。

集合成员关系和相等运算

集合相等

您可以使用 == 运算符检查两个集合是否包含相同的元素。如果两个集合包含相同的元素,则返回true,否则返回false。

Beispiel5:集合相等操作

let a: Set = [1, 3, 5, 7, 9]
let b: Set = [0, 3, 7, 6, 8]
let c:Set = [9, 7, 3, 1, 5]
if a == b {
    print("a和b相同")
} else {
    print("a和b不同")
}
if a == c {
    print("a和c相同")
} else {
    print("a和c不同")
}

Wenn Sie das obige Programm ausführen, wird die Ausgabe sein:

a和b不同
a和c相同

集合成员关系

您还可以使用以下方法检查两个集合之间的关系:

  • isSubset(of:) - 此方法确定一个集合的所有值是否都存在于指定的集合中。

  • isSuperset(of:)  - 此方法确定集合是否包含指定集合中的所有值。

  • isStrictSubset(of:) 或 isStrictSuperset(of?): - 此方法确定一个集合是指定集合的子集还是超集,但不等于指定集合。

  • isDisjoint(with:)  - 此方法确定两个集合是否没有共同的值。

Beispiel6:集合成员关系操作

let a: Set = [1, 3, 5, 7, 9]
let b: Set = [0, 3, 1, 7, 6, 8, 9, 5]
print("isSubset:", a.isSubset(of: b))
print("isSuperset:", b.isSuperset(of: a))
print("isStrictSubset:", a.isStrictSubset(of: b))
print("isDisjointWith:", a.isDisjoint(with: b))

Wenn Sie das obige Programm ausführen, wird die Ausgabe sein:

isSubset: true
isSuperset: true
isStrictSubset: true
isDisjointWith: false

Lassen Sie uns die Methoden analysieren, die im folgenden print-Befehl verwendet werden:

  • isSubset gibt true zurück, da Sammlung b alle Elemente von a enthält

  • isSuperset gibt true zurück, da b alle Werte von a enthält.

  • isStrictSubset gibt true zurück, da Sammlung b alle Elemente von a enthält und die beiden Sammlungen ungleich sind.

  • isDisjointWith gibt false zurück, da a und b einige gemeinsame Werte haben.

Built-in-Funktionen und -Attribute der Sammlung

1.isEmpty-Attribut

Dieses Attribut bestimmt, ob die Sammlung leer ist. Wenn die Sammlung keine Werte enthält, gibt es true zurück, sonst false.

Beispiel7Wie funktioniert .isEmpty?

let intSet:Set = [21, 34, 54, 12]
print(intSet.isEmpty)

Wenn Sie das Programm ausführen, wird die Ausgabe wie folgt sein:

false

2.first-Attribut

Dieses Attribut wird verwendet, um auf das erste Element der Sammlung zuzugreifen.

Beispiel8Wie funktioniert .first?

let intSet = [21, 34, 54, 12]
print(intSet.first)

Wenn Sie das Programm ausführen, wird die Ausgabe wie folgt sein:

Optional(54)

Da Set eine unsortierte Sammlung ist, kann das first-Attribut nicht gewährleisten, dass es sich um das erste Element der Sammlung handelt. Sie werden möglicherweise54außer anderen Werten.

Gleichzeitig können Sie das last-Attribut verwenden, um auf das letzte Element der Sammlung zuzugreifen.

3.insert-Funktion - Element einfügen

Die insert-Funktion wird verwendet, um Elemente in die Sammlung einzufügen/Elemente hinzufügen.

Beispiel9Wie funktioniert die insert-Funktion?

var intSet:Set = [21, 34, 54, 12]
intSet.insert(50)
print(intSet)

Wenn Sie das Programm ausführen, wird die Ausgabe wie folgt sein:

[54, 12, 50, 21, 34]

4.reversed() - Sammlung umkehren

Diese Funktion gibt die Elemente der Sammlung im umgekehrten Reihenfolge zurück.

Beispiel10Wie funktioniert .reversed()?

var intSet:Set = [21, 22, 23, 24, 25]
print(intSet)
let reversedSet = intSet.reversed()
print(reversedSet)

Wenn Sie das Programm ausführen, wird die Ausgabe wie folgt sein:

[22, 23, 21, 24, 25]
[25, 24, 21, 23, 22]

5.count - Gibt die Gesamtzahl der Elemente in der Sammlung zurück

Dieser Eigenschaftswert gibt die Gesamtzahl der Elemente in der Sammlung zurück.

Beispiel11:Wie funktioniert die Zählung von count?

let floatSet:Set = [10.2, 21.3, 32.0, 41.3]
print(floatSet.count)

Wenn Sie das Programm ausführen, wird die Ausgabe wie folgt sein:

4

6. removeFirst - Entfernen und zurückgeben des ersten Wertes aus der Sammlung

Diese Funktion entfernt den ersten Wert aus der Sammlung und gibt ihn zurück.

Beispiel12:Wie funktioniert removeFirst?

var strSet:Set = ["ab", "bc", "cd", "de"]
let removedVal = strSet.removeFirst()
print("entfernter Wert ist \(removedVal)")
print(strSet)

Wenn Sie das Programm ausführen, wird die Ausgabe wie folgt sein:

entfernter Wert ist de
["ab", "cd", "bc"]

Gleichzeitig können Sie auch die Funktion removeAll verwenden, um die Sammlung zu leeren.