<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Swift 集 > 原文: [https://www.programiz.com/swift-programming/sets](https://www.programiz.com/swift-programming/sets) #### 在本教程中,您將了解集合,創建集合,修改集合以及集合中的一些常見操作。 在先前的 [Swift Arrays](/swift-programming/arrays) 文章中,我們了解了如何創建可以在有序列表中包含多個值的數組。 但是,如果必須確保列表只能容納一次值,則可以在 Swift 中使用一個集合。 * * * ## 什么是集? 集只是一個容器,可以在無序列表中保存多個數據類型的值,并確保容器中的元素唯一(即每個數據僅出現一次)。 無序列表意味著您將不會以與`Set`中定義的項目相同的順序獲得元素。 在數組上使用`Set`的主要優點是,當您需要確保一個項目僅出現一次并且項目的順序不重要時。 集合中存儲的值必須是**可散列的**。 這意味著它必須提供`hashValue`屬性。 這很重要,因為集合是無序的,并且它使用`hashValue`用于訪問集合的元素。 Swift 的所有基本類型(例如`String`,`Int`,`Double`和`Bool`)在默認情況下都是可哈希的,并且可以用作設置值類型。 但是,您還可以在 Swift 中創建可存儲在集合中的哈希類型。 * * * ## 如何在 Swift 中聲明集? 您可以通過將類型指定為`Set`,然后再將其存儲在`< >`中的數據類型來創建一個空集。 ### 示例 1:聲明一個空集 ```swift let emptyIntSet:Set <int>= [] print(emptyIntSet)</int> ``` **或** ```swift let emptyIntSet:Set <int>= Set<int>() print(emptyIntSet)</int></int> ``` 運行該程序時,輸出為: ```swift [ ] ``` 在上面的程序中,我們聲明了一個類型為`Set`的常量`emptyIntSet`,它可以存儲多個整數值并用 0 值初始化。 由于 Swift 是一種類型推斷語言,因此您也可以在不指定數據類型的情況下直接創建集,但是必須使用一些值進行初始化,以便編譯器可以將其類型推斷為: ### 示例 2:聲明具有某些值的集 ```swift let someIntSet:Set = [1, 2, 3, 4, 5, 6, 7, 8, 9] print(someIntSet) ``` 運行該程序時,輸出為: ```swift [2, 4, 9, 5, 6, 7, 3, 1, 8] ``` 在上面的程序中,我們聲明了一個常量`someIntSet`,該常量可以存儲`Integer`集,而無需顯式指定類型。 但是,定義變量時我們需要寫`:Set`,否則 Swift 會為我們創建一個數組。 另外,作為數組,我們使用`[]`括號將 **1、2、3、4、5、6、7、8、9** 值初始化為集合。 如您所知,當您嘗試將集合內的值打印為`print(someIntSet)`時,您將以與定義集合中的項不同的順序獲得結果,因為它存儲的值沒有定義的順序。 因此,每次訪問訂單時都會更改。 ### 示例 3:聲明具有重復值的集 ```swift let someStrSet:Set = ["ab","bc","cd","de","ab"] print(someStrSet) ``` 運行該程序時,輸出為: ```swift ["de", "ab", "cd", "bc"] ``` 在上面的程序中,我們在集合中定義了重復值`ab`。 和。 當我們嘗試使用`print(someStrSet)`訪問集合內的值時,重復值將自動從集合中刪除。 因此,集保證了其中的唯一元素/值。 您還可以在 Swift 中使用自己的自定義`Hashable`類型聲明一個集合。 要了解更多信息,請訪問 Swift `Hashable`。 * * * ## 如何在 Swift 中訪問集的元素? 您無法使用*下標語法*作為數組訪問集合的元素。 這是因為集合是無序的,并且沒有索引來訪問元素。 因此,您需要使用其方法和屬性或使用`for-in`循環來訪問集合。 #### 示例 4:訪問集中的元素 ```swift var someStrSet:Set = ["ab", "bc", "cd", "de"] for val in someStrSet { print(val) } ``` 運行該程序時,輸出為: ```swift de ab cd bc ``` 在上面的程序中,我們以與集合元素不同的順序獲得`val`,因為集合與數組不同,它們是無序的。 您還可以訪問集合的元素,如下所示直接從集合中刪除值: * * * #### 示例 5:使用`remove()`訪問集中的元素 ```swift var someStrSet:Set = ["ab", "bc", "cd", "de"] let someVal = someStrSet.remove("cd") print(someVal) print(someStrSet) ``` 運行該程序時,輸出為: ```swift Optional("cd") ["de", "ab", "bc"] ``` 在上面的程序中,您可以看到`remove`方法返回一個可選字符串。 因此,建議您執行以下可選處理。 要了解有關可選件的更多信息,請訪問 [Swift 可選項](/swift-programming/optionals "Swift Optionals")。 * * * #### 示例 6:`remove()`的可選項處理 ```swift var someStrSet:Set = ["ab", "bc", "cd", "de"] if let someVal = someStrSet.remove("cd") { print(someVal) print(someStrSet) } else { print("cannot find element to remove") } ``` 運行該程序時,輸出為: ```swift cd ["de", "ab", "bc"] ``` * * * ## 如何在集中添加新元素? 您可以使用 Swift 中的`insert()`方法將新元素添加到集合中。 ### 示例 7:使用`insert()`添加新元素 ```swift var someStrSet:Set = ["ab", "bc", "cd", "de"] someStrSet.insert("ef") print(someStrSet) ``` 運行該程序時,輸出為: ```swift ["ab", "de", "cd", "ef", "bc"] ``` 在上面的程序中,我們使用集合的`insert()`方法向集合添加新元素。 由于集合是無序的,因此未知插入元素的位置。 * * * ## 集的操作 使用集合的另一個主要優點是您可以執行集合操作,例如將兩個集合組合在一起,確定兩個集合具有哪些共同的值等。此操作類似于數學中的集合操作。 ![Set operations in Swift](https://img.kancloud.cn/c4/c6/c4c601e92cc5613b448392664b7c3c87_606x396.png "Set operations in Swift") ### 1.并集 兩個集合`a`和`b`的并集是`a`或`b`或`a`和`b`兩者中的元素的集合。 ```swift let a: Set = [1, 3, 5, 7, 9] let b: Set = [0, 2, 4, 6, 8] print(a.union(b)) ``` 當您運行上述程序時,輸出將是: ```swift [8, 2, 9, 4, 5, 7, 6, 3, 1, 0] ``` * * * ### 2.交集 兩個集合`a`和`b`的交集是包含`a`的所有元素的集合,這些元素也屬于`b`。 ```swift let a: Set = [1, 3, 5, 7, 9] let b: Set = [0, 3, 7, 6, 8] print(a.intersection(b)) ``` 運行該程序時,輸出為: ```swift [7, 3] ``` 因此,`print(a.intersection(b))`將輸出一個新的集合,其值在`a`和`b`中都是相同的`[7, 3]`。 * * * ### 3.差集 兩個集合`a`和`b`的減法是包含`a`的所有元素的集合,但刪除了也屬于`b`的元素。 ```swift let a: Set = [1, 3, 5, 7, 9] let b: Set = [0, 3, 7, 6, 8] print(a.subtracting(b)) ``` 運行該程序時,輸出為: ```swift [5, 9, 1] ``` 因此,`print(a.subtracting(b))`輸出具有值`[5, 9, 1]`的新集合。 * * * ### 4.對稱差集 兩個集合`a`和`b`的對稱差是包含所有元素的集合,這些元素位于兩個集合中的任何一個中,但不在兩個集合中。 ```swift let a: Set = [1, 3, 5, 7, 9] let b: Set = [0, 3, 7, 6, 8] print(a.symmetricDifference(b)) ``` 運行該程序時,輸出為: ```swift [5, 6, 8, 0, 1, 9] ``` 因此,`print(a.symmetricDifference(b))`輸出具有值`[5, 6, 8, 0, 1, 9]`的新集合。 * * * ## 集的成員資格和相等操作 ### 集的相等 您可以使用`==`運算符檢查兩組是否包含相同的元素。 如果兩個集合包含相同的元素,則返回`true`,否則返回`false`。 #### 示例 5:集的相等操作 ```swift 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 and b are same") } else { print("a and b are different") } if a == c { print("a and c are same") } else { print("a and c are different") } ``` 運行該程序時,輸出為: ```swift a and b are different a and c are same ``` * * * ### 集的成員資格 您還可以使用以下方法檢查兩個集合之間的關系: * `isSubset(of:)`此方法確定指定集合中是否包含集合的所有值。 * `isSuperset(of:)`此方法確定一個集合是否包含指定集合中的所有值 * `isStrictSubset(of:`或`isStrictSuperset(of:)`:此方法確定集合是子集還是超集,但不等于指定的集。 * `isDisjoint(with:)`此方法確定兩個集合是否沒有共同的值。 #### 示例 6:集的成員資格操作 ```swift 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)) ``` 當您運行上述程序時,輸出將是: ```swift isSubset: true isSuperset: true isStrictSubset: true isDisjointWith: false ``` 讓我們分析下面的`print`語句中使用的方法: * `isSubset`返回`true`,因為集合`b`包含`a`中的所有元素 * `isSuperset`返回`true`,因為`b`包含`a`的所有值。 * `isStrictSubset`返回`true`,因為集合`b`包含`a`中的所有元素,并且兩個集合都不相等。 * `isDisjointWith`返回`false`,因為`a`和`b`具有一些共同的值。 * * * ## 內置的一些有用的`Set`函數&屬性 ### 1\. `isEmpty` 此屬性確定集合是否為空。 如果集合不包含任何值,則返回`true`,否則返回`false`。 #### 示例 7:`isEmpty`如何工作? ```swift let intSet:Set = [21, 34, 54, 12] print(intSet.isEmpty) ``` 運行該程序時,輸出為: ```swift false ``` * * * ### 2.`first` 此屬性用于訪問集合的第一個元素。 #### 示例 8:`first`如何工作? ```swift let intSet = [21, 34, 54, 12] print(intSet.first) ``` 運行該程序時,輸出為: ```swift Optional(54) ``` 由于集是無序集合,因此`first`屬性不能保證集的第一個元素。 您可能會獲得 54 以外的其他值。 同樣,您可以使用`last`屬性訪問集合的最后一個元素。 * * * ### 3.`insert` `insert`函數用于在集合中插入/附加元素。 #### 示例 9:`insert`如何工作? ```swift var intSet:Set = [21, 34, 54, 12] intSet.insert(50) print(intSet) ``` 運行該程序時,輸出為: ```swift [54, 12, 50, 21, 34] ``` * * * ### 4.`reversed` 此函數以相反的順序返回集合的元素。 #### 示例 10:`reversed()`如何工作? ```swift var intSet:Set = [21, 22, 23, 24, 25] print(intSet) let reversedSet = intSet.reversed() print(reversedSet) ``` 運行該程序時,輸出為: ```swift [22, 23, 21, 24, 25] [25, 24, 21, 23, 22] ``` * * * ### 5.`count` 此屬性返回集合中元素的總數。 #### 示例 11:`count`如何工作? ```swift let floatSet:Set = [10.2, 21.3, 32.0, 41.3] print(floatSet.count) ``` 運行該程序時,輸出為: ```swift 4 ``` * * * ### 6\. `removeFirst` 此函數從集合中刪除并返回第一個值。 #### 示例 12:`removeFirst`如何工作? ```swift var strSet:Set = ["ab", "bc", "cd", "de"] let removedVal = strSet.removeFirst() print("removed value is \(removedVal)") print(strSet) ``` 運行該程序時,輸出為: ```swift removed value is de ["ab", "cd", "bc"] ``` 同樣,您也可以使用`removeAll`函數清空集。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看