集合类型
Swift提供了三种主集合类型,称为数组,集合和字典,用于存储值的集合。 数组是值的有序集合。集合是唯一值的无序集合。 字典是键-值关联的无序集合。
一、数组
数组(Array)在有序列表中存储相同类型的值。相同的值可以在不同位置多次出现在数组中。
1>.创建数组
//创建空数组
var someInts= [Int]()//使用初始化语法创建特定类型的空数组
someInts.append(3)
print(someInts)//[3]
someInts = []//赋值空数组
print(someInts)//[] 一个空数组,但仍然是类型[Int]
//使用默认值创建数组
var threeDoubles =Array(repeating:0.0, count:3)
print(threeDoubles)//[0.0, 0.0, 0.0]
//通过一起相加(+)两个数组来创建数组
var twoDoubles =Array(repeating:0.12, count:2)
var fourDoubles =Array(repeating:1.5, count:4)
print(twoDoubles +fourDoubles)//[0.12, 0.12, 1.5,1.5, 1.5, 1.5]
//使用值列表创建数组 [值1,值2,值3] 值用逗号分隔,并用一对方括号括起来
var shoppingList: [String] =["Eggs","Milk"]
2>.访问和修改数组
var modifyArray = ["Eggs","Milk"]
//count:数组的元素个数
print("modifyArrayhas\(modifyArray.count) items")//modifyArray has 2items
//isEmpty:判断数组的count属性是否等于0
print(modifyArray.isEmpty)//false
//append(_ :)将新元素添加到数组的末尾:
modifyArray.append("Apple")
print(modifyArray)//["Eggs","Milk", "Apple"]
//使用加法赋值运算符(+=)附加一个或多个兼容项目的数组
modifyArray += ["peach"]
print(modifyArray)//["Eggs","Milk", "Apple", "peach"]
//使用下标语法从数组中检索值
print(modifyArray[2])//Apple 注:数组中的第一个项目的索引为0,而不是1
//使用下标语法来更改给定索引处的现有值
modifyArray[1] ="chicken"
print(modifyArray)//["Eggs","chicken", "Apple", "peach"]
modifyArray[0...2] = ["chicken","chicken","chicken"]
print(modifyArray)//["chicken","chicken", "chicken", "peach"]
//注:不能使用下标语法将新元素附加到数组的末尾。
//注:数组中最大的有效索引将始终为count - 1,因为数组从零开始索引。
//insert(_:at :) 在指定索引处将数据插入数组
modifyArray.insert("Green", at:1)
print(modifyArray)//["chicken","Green", "chicken", "chicken", "peach"]
//remove(at :)从数组中删除一个元素
modifyArray.remove(at:0)
print(modifyArray)//["Green","chicken", "chicken", "peach"]
//removeLast()从数组中删除最后一个项目
modifyArray.removeLast()
print(modifyArray)//["Green","chicken", "chicken"]
//removeAll()移除数组的所有元素,变为空数组
modifyArray.removeAll()
print(modifyArray)//print(modifyArray)
3>.数组的遍历
//使用for-in循环遍历数组中的整组值
var iterateArray = ["Eggs","Apple"]
for itemin iterateArray {
print(item)
}
/*
Eggs
Apple
*/
//enumerated()方法返回一个由整数和项组成的元组。
for (index, value)in iterateArray.enumerated(){
print("Item \(index):\(value)")
}
/*
Item0: Eggs
Item1: Apple
*/
二、集合 Sets
集合在集合中存储相同类型的不同值,没有定义的顺序
Sets的哈希值
Swift的所有基本类型(例如String,Int,Double和Bool)在默认情况下是哈希的,并且可以用作设置值类型或字典键类型。默认情况下,没有关联值的枚举值值也是可哈希的。
集合 Sets
集合在集合中存储相同类型的不同值,没有定义的顺序。
Swift的所有基本类型(例如String,Int,Double和Bool)在默认情况下是哈希的,并且可以用作设置值类型或字典键类型。默认情况下,没有关联值的枚举值也是可哈希的。
Swift集合的类型为Set<Element>,其中Element是允许集合存储的类型。
1>.集合的创建
//创建和初始化空集
var letters =Set<Character>()//初始化元素为Character类型的空集
letters.insert("a")//插入一个元素a
letters = []//置为空集,但仍是Set<Character>类型
//使用数组创建集合
let mybooks:Set = ["ecev","cevev"]
var favoriteFruits:Set<String> = ["Apple","Peach"]
print(mybooks,favoriteFruits)//["ecev", "cevev"]["Apple", "Peach"]
2>.访问和修改集合
var modifySet:Set<String> = ["Apple","Peach"]
//count访问集合的子元素个数
print(modifySet.count)//2
//isEmpty判断集合是否为空
print(modifySet.isEmpty)//false
//insert(_ :)为集合添加新元素
modifySet.insert("chicken")
print(modifySet)//["chicken", "Apple","Peach"]
//remove(_ :)移除集合的指定元素
//removeAll()移除集合中的所有元素
modifySet.remove("Apple");
print(modifySet)//["chicken", "Peach"]
//contains(_ :)判断集合是否包含特定项目
print(modifySet.contains("Apple"))//false
3>.集合的遍历
//使用for-in循环遍历集合中的值
for itemin modifySet{
print(item)
}
/*
chicken
Peach
*/
4>.集合的合并
intersection(_:)创建一个只有两个公用集的值的新集。
symmetricDifference(_ :)创建一个新集合,其值在两个集合中,但不能同时存在。
union(_ :)创建一个包含两个集合中的所有值的新集合。
subtracting_ :)方法创建一个新的集合,其值不在指定集合中。
let oddDigits:Set = [1, 3, 5, 7,9]
let evenDigits:Set = [0, 2, 4, 6,8]
letsingleDigitPrimeNumbers:Set = [2, 3, 5, 7]
print(oddDigits.union(evenDigits).sorted())//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(oddDigits.intersection(evenDigits).sorted())//[]
print(oddDigits.subtracting(singleDigitPrimeNumbers).sorted())//[1, 9]
print(oddDigits.symmetricDifference(singleDigitPrimeNumbers).sorted())//[1, 2, 9]
5>.集合元素和相等
== 确定两个集合是否包含所有相同的值。
isSubset(of :)方法来确定集合的所有值是否都包含在指定的集合中。
isSuperset(of :)方法来确定集合是否包含指定集合中的所有值。
isStrictSubset(of :)或isStrictSuperset(of :)方法来确定集合是否为子集或超集,但不等于指定集。
isDisjoint(with :)方法来确定两个集合是否具有任何共同的值。
字典Dictionary
字典存储相同类型的键和相同类型的值之间的关联,没有定义顺序。
Swift字典的类型为Dictionary<Key,Value>,其中Key是可用作字典键的值的类型,Value是字典为这些键存储的值的类型。
1>.字典的创建
//创建空字典
var namesOfIntegers = [Int:String]()
namesOfIntegers[16] ="sixteen"
namesOfIntegers = [:]
//直接初始化字典
//[key1: value 1, key 2: value 2, key 3: value 3]
var airports: [String:String] = ["YYZ":"Toronto Pearson", "DUB": "Dublin"]
2>.访问和修改字典
var provinceCity: [String:String] = ["Beijing":"Beijing","HeNan":"Zhengzhou"]
//count获取字典中键值对的个数
print(provinceCity.count)//2
//isEmpty判断字典中键值对的个数是否为0
print(provinceCity.isEmpty)//false
//使用适当类型的新键作为下标索引,并分配适当类型的新值
provinceCity["Shandong"] ="Jinan"
print(provinceCity)//["HeNan": "Zhengzhou","Shandong": "Jinan", "Beijing":"Beijing"]
//直接修改键对应的值
provinceCity["Shandong"] ="Qingdao"
//updateValue(_:forKey :) 设置或更新特定键的值。改方法字典值类型的可选值
provinceCity.updateValue("Jinan",forKey:"Shandong")
print(provinceCity)//["HeNan": "Zhengzhou","Shandong": "Jinan", "Beijing":"Beijing"]
删除键值对
//使用下标语法通过为该键分配值nil来从字典中删除键值对
provinceCity["Shandong"] =nil//
print(provinceCity)//["HeNan": "Zhengzhou","Beijing": "Beijing"]
//removeValue(forKey :)方法从字典中删除键值对
provinceCity.removeValue(forKey:"Beijing")
print(provinceCity)//["HeNan": "Zhengzhou"]
字典的遍历
for (province, city)in provinceCity {
print("\(province):\(city)")//HeNan: Zhengzhou
}