Swift 集合(Set)
Swift的集合(Set)是一個簡單的容器,可以按照無序列表的方式存儲多個相同類型的值。愛掏網(wǎng) - it200.com它不能存儲重復(fù)的值。愛掏網(wǎng) - it200.com這里的無序列表指的是你按照設(shè)置的方式無法獲得項目的順序。愛掏網(wǎng) - it200.com
Swift集合(Set)與Swift數(shù)組的主要區(qū)別在于,Swift集合(Set)不允許重復(fù)存儲相同的值,而Swift數(shù)組可以。愛掏網(wǎng) - it200.comSwift集合(Set)確保每個元素只出現(xiàn)一次,且元素的順序不重要。愛掏網(wǎng) - it200.com
存儲在Swift集合(Set)中的值必須是 可哈希的(hashable) 。愛掏網(wǎng) - it200.com可哈希的意思是,它必須提供一個hashValue屬性。愛掏網(wǎng) - it200.comhashValue用于訪問集合中的元素,因為集合是無序的。愛掏網(wǎng) - it200.com
所有Swift的基本數(shù)據(jù)類型(例如String、Int、Double和Bool)默認(rèn)都是可哈希的,可以用作集合的值類型。愛掏網(wǎng) - it200.com我們也可以在Swift中創(chuàng)建自己的可哈希類型,以便存儲在集合中。愛掏網(wǎng) - it200.com
如何在Swift中聲明集合(Set)
我們可以聲明一個集合(Set)來存儲一些值。愛掏網(wǎng) - it200.com
示例
let someIntSet:Set = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(someIntSet)
輸出:
[2, 4, 9, 5, 6, 7, 3, 1, 8]
聲明一個包含重復(fù)值的集合
let someIntSet:Set = [1, 2, 3, 4, 8, 8, 8, 5, 5]
print(someIntSet)
輸出:
[2, 4, 5, 3, 1, 8]
在上面的程序中,我們輸入了重復(fù)的值5和8。愛掏網(wǎng) - it200.com但是在輸出中,我們可以看到重復(fù)的值已經(jīng)被移除。愛掏網(wǎng) - it200.com
在Swift中訪問集合元素
我們不能像訪問數(shù)組元素那樣以相同的方式訪問集合元素,因為集合元素是無序的。愛掏網(wǎng) - it200.com
因此,我們必須使用集合的方法和屬性或使用for-in循環(huán)來訪問集合元素。愛掏網(wǎng) - it200.com
在Swift中訪問所有集合元素
示例
var someIntSet:Set = [1, 2, 3, 4, 5, 6]
for val in someIntSet {
print(val)
}
輸出:
5
6
2
3
1
4
使用 remove() 方法訪問選擇性的集合元素
我們可以使用 remove() 方法訪問集合中的選擇性元素。愛掏網(wǎng) - it200.com
示例
var someIntSet:Set = [1, 2, 3, 4, 5, 6]
let someVal = someIntSet.remove(5)
print(someVal)
print(someIntSet)
輸出結(jié)果:
Optional(5)
[6, 2, 3, 1, 4]
在上述程序中,你可以看到remove()方法返回一個可選的字符串。愛掏網(wǎng) - it200.com建議按照以下方式進(jìn)行可選處理。愛掏網(wǎng) - it200.com
使用remove()方法的可選處理
示例
var someIntSet:Set = [1, 2, 3, 4, 5, 6]
if let someVal = someIntSet.remove(5) {
print(someVal)
print(someIntSet)
} else {
print("cannot find element to remove")
}
輸出:
5
[6, 2, 3, 1, 4]
在Swift中向集合中添加新元素
insert()方法用于在Swift中向集合中添加新元素。愛掏網(wǎng) - it200.com
添加單個元素
示例
var someIntSet:Set = [1, 2, 3, 4, 5, 6]
someIntSet.insert(7)
print(someIntSet)
輸出:
[2, 4, 5, 6, 7, 3, 1]
在上面的示例中,我們向預(yù)定義集合中添加了一個新元素7。愛掏網(wǎng) - it200.com 要添加多個元素
示例
var someIntSet:Set = [1, 2, 3, 4, 5, 6]
someIntSet.insert(7)
someIntSet.insert(8)
someIntSet.insert(9)
someIntSet.insert(10)
print(someIntSet)
輸出:
[10, 2, 4, 9, 5, 6, 7, 3, 1, 8]
在Swift中的集合操作
使用集合的另一個優(yōu)點是它方便您執(zhí)行集合操作,即并集、交集等。愛掏網(wǎng) - it200.com它與數(shù)學(xué)中的集合運算相同。愛掏網(wǎng) - it200.com
并集集合操作
兩個集合 a 和 b 的并集是所有元素都組合在 a集合 和 b集合 中的集合。愛掏網(wǎng) - it200.com可以通過使用 a.union(b) 來訪問它。愛掏網(wǎng) - it200.com
示例
let a: Set = [1, 3, 5, 7, 9]
let b: Set = [0, 2, 4, 6, 8]
print(a.union(b))
輸出:
[8, 2, 9, 4, 5, 7, 6, 3, 1, 0]
交集運算
兩個集合 a 和 b 的交集是兩個集合中都出現(xiàn)的元素組成的集合。愛掏網(wǎng) - it200.com可以通過使用 a.intersection(b) 來訪問交集。愛掏網(wǎng) - it200.com
示例
let a: Set = [1, 3, 5, 7, 9]
let b: Set = [0, 3, 4, 7, 8]
print(a.intersection(b))
輸出:
[7, 3]
減法集合運算
兩個集合的減法 a 和 b 是一個集合,該集合包含了所有屬于a,但不屬于b的元素。愛掏網(wǎng) - it200.com通過使用 a.subtracting(b) 可以訪問。愛掏網(wǎng) - it200.com
示例
let a: Set = [1, 3, 5, 7, 9]
let b: Set = [0, 3, 4, 7, 8]
print(a.subtracting(b))
輸出:
[5, 9, 1]
對稱差集操作
兩個集合 a 和 b 的對稱差是一個包含在任一集合中但不在兩個集合中都有的元素的集合。愛掏網(wǎng) - it200.com可以通過使用 a.symmetricDifference(b) 來訪問。愛掏網(wǎng) - it200.com
示例
let a: Set = [1, 3, 5, 7, 9]
let b: Set = [1, 3, 7, 6, 8]
print(a.symmetricDifference(b))
輸出:
[5, 6, 9, 8]
一些內(nèi)置的函數(shù)和屬性
索引 | 內(nèi)置的集合函數(shù) | 說明 |
---|---|---|
1. | isEmpty | isEmpty屬性用于確定集合是否為空。愛掏網(wǎng) - it200.com如果集合為空,則返回true;否則返回false。愛掏網(wǎng) - it200.com |
2. | first | first屬性用于訪問集合的第一個元素。愛掏網(wǎng) - it200.com |
3. | insert | insert函數(shù)用于在集合中插入/添加元素。愛掏網(wǎng) - it200.com |
4. | reversed | 該函數(shù)以反向順序返回集合的元素。愛掏網(wǎng) - it200.com |
5. | count | 該屬性返回集合中的元素總數(shù)。愛掏網(wǎng) - it200.com |
6. | removeFirst | 該函數(shù)從集合中移除并返回第一個值。愛掏網(wǎng) - it200.com |