Swift集合类型
本周,我将总结我在Swift书的“集合类型”一章中阅读的重要方法/概念。 所以,让我们开始吧🙂
Swift提供了三种主要的集合类型,称为数组,集合和字典,用于存储值的集合。 数组是值的有序集合。 集是唯一值的无序集合。 字典是键-值关联的无序集合。
数组
数组将相同类型的值存储在有序列表中。 同一值可以在数组中的不同位置多次出现。
创建一个空数组:
var perfectNumbers = [Int]()//https://en.wikipedia.org/wiki/Perfect_number
var名称= [String]()
创建具有默认值的数组
var threeDoubles = [Double](计数:3,重复值:0.0)
将一个数组追加到另一个数组
var anotherThreeDoubles = [Double](count:3,重复值:2.5)
var sixDoubles = threeDoubles + anotherThreeDoubles
使用数组文字创建数组
var动物= [“猫”,“狗”]
var primeNumbers = [1,2,3,5,7]
访问和修改数组
可以通过方法/属性或使用下标语法来完成。下面列出了两个有用的方法:
count —查找数组中项目数的方法
isEmpty —查找数组是否为空的方法
append —将项目添加到数组的末尾
+ = 运算符—与append方法相同的功能
insert(_:atIndex 🙂 —在数组中的特定索引处添加项目
下标索引可用于访问/修改某个索引处的项目。 即使替换值集的长度与原始值的长度不同,它也可以用于立即更改值的范围
//动物数组= [“猫”,“狗”]
如果animals.isEmpty {
print(“动物数组为空”)
}
其他{
print(“动物数组包含\(animals.count)个动物”)
}
animals.append(“狮子”)
动物+ = [“猎豹”]
animals.insert(“ Tiger”,atIndex:0)
//动物数组= [“老虎”,“猫”,“狗”,“狮子”,“猎豹”]
动物[1] =“袋鼠”
var firstItem = animals [0] // firstItem =“老虎”
动物[2 ... 4] = [“斑马”,“大象”]
//动物数组= [“老虎”,“袋鼠”,“斑马”,“大象”]
遍历数组
您可以使用“ for-in”循环遍历整个数组
用于动物{
打印(动物)
}
如果需要index的整数值以及数组中的值,请使用array的enumerate方法,该方法返回index和value的元组。
for animals。(enumerate(){
print(“索引处的动物\(索引):\(值)”)
}
套装
集合在集合中存储相同类型的不同/唯一值,没有定义的顺序。 当项目的顺序不重要时,或者需要确保某个项目仅出现一次时,可以使用集合而不是数组。
类型必须是可哈希的才能存储在集合中(必须提供一种为其自身计算哈希值的方法)。 哈希值是一个Int值,对于所有对象而言,哈希值均相等(如果a == b,则hash(a)== hash(b))。 所有Swift基本类型都是可哈希的,并且可以用作设置值。
创建一个空集
变量字母= Set ()
//如果存在上下文,则可以使用[]创建一个空集
letter.insert(“ c”)
字母= [] //字母现在为空
使用数组文字创建集合
var favoritePlaces:Set = [“ Vizag”,“ Gangtok”,“ Seward”,“ Seychelles”]] ///请注意,我们在此处将类型明确!
不能从数组文字中推断集合类型,因此必须显式设置集合类型。 但是,由于Swift的类型推断,您可以在初始化期间跳过Set类型。 参见下面的代码:
var favoritePlaces_2:Set = [“ Vizag”,“ Gangtok”,“ Seward”,“塞舌尔”]] //请注意,此处不再写Set类型
访问和修改集合
下面列出了几种有用的方法:
count —查找集合中项目数的方法
isEmpty —查找Set是否为空的方法
insert(_ 🙂 —在集合中插入一个条目
remove(_ 🙂 —如果该项目存在,则将其从集合中移除;如果Set中不存在该项目,则返回nil
removeAll(:) —删除集合中的所有条目
contains(_ 🙂 —检查集合中是否存在条目
这是这些方法的一些代码示例
// var favoritePlaces:Set = [“ Vizag”,“ Gangtok”,“ Seward”,“塞舌尔”]
如果favouritePlaces.isEmpty {
打印(“您没有喜欢的地方。旅行时间😉”)
}
其他{
print(“您有\(favoritePlaces.count)个最喜欢的地方。哇!这是一个相当大的清单。”)
}
favoritePlaces.insert(“克罗地亚”)
favoritePlaces.remove(“ Gangtok”)
如果favouritePlaces.contains(“ Vizag”){
打印(“看起来您去过命运之城!”)
}
其他{
打印(“花时间参观维扎格!风景优美”)
}
遍历集合
与数组类似,我们可以使用for-in循环遍历Set
适用于收藏位置{
打印(“ \(地方)”)
}
//“苏厄德”,“塞舌尔”,“维扎格”,“克罗地亚”
Swift的Set类型没有定义的顺序。 要按特定顺序遍历项目,可以使用排序功能
用于放置在favouritePlaces.sort(){
打印(“ \(地方)”)
}
//“克罗地亚”,“苏厄德”,“塞舌尔”,“维扎格”
字典
字典在集合中存储相同类型的键和相同类型的值之间的关联,而没有定义的顺序。 每个值都与唯一键相关联,该键充当字典中该值的标识符。 与数组中的项目不同,字典中的项目没有指定的顺序。
创建一个空字典
var namesOfIntegers = [Int:String]()
var stateCapitals = [String:String]()
//如果上下文已知,则可以使用[:]将字典设为空
stateCapitals [“ CA”] =“ Benecia” //稍后将对此进行解释;)
stateCapitals = [:]
用字典文字创建字典
字典文字与数组文字相似,是将键值对编写为字典集合的一种简便方法。 在字典文字中,键和值用冒号分隔。
var stateCapitals:[String:String] = [“ CA”:“ Benecia”,“ OR”:“ Salem”]
//这里的键和值都是String类型
var stateCapitals = [“ CA”:“ Benecia”,“ OR”:“ Salem”]
//由于字典文字值是一致的,因此swift推断类型。
访问和修改字典
下面总结了一些有用的方法:
count —查找字典中项目数的方法
isEmpty —查找字典是否为空的方法
updateValue(_:forKey 🙂 —设置或更新给定键的值。 此函数可以选择返回键的先前值(如果已设置)。此方法是下标方法(用于更新/设置字典中键的值)。
removeValueForKey(_ 🙂 —从字典中删除键/值对。 或者,您可以使用下标方法,并将值也设置为nil 。
所有这些方法的代码示例如下:
如果stateCapitals.isEmpty {
stateCapitals [“ MT”] =“ Helena” //向字典添加新的键值对
}
其他{
打印(“我们的stateCapitals词典有\(stateCapitals.count)个条目”)
}
如果让oldCapital = stateCapitals.updateValue(“萨克拉门托”,forKey:“ CA”){
print(“ CA的旧资本为\(oldCapital)”)
}
其他{
print(“ CA没有旧资本!”)
}
//打印“ CA的旧首都是贝内西亚”(https://en.wikipedia.org/wiki/贝尼西亚,_California)
stateCapitals [“ GA”] =“亚特兰大”
// stateCapitals = [“ CA”:“萨克拉门托”,“ OR”:“ Salem”,“ MT”:“ Helena”,“ GA”:“亚特兰大”]
如果让removeCapital = stateCapital.removeValueForKey(“ OR”){
print(“已删除的资本为\(removedCapital)”)
}
其他{
print(“字典不包含OR的大写”)
}
stateCapitals [“ MT”] = nil //这还将从字典中删除MT:Helena条目
遍历字典
for(state,capital)in stateCapitals {
print(“ \(州)的资本为\(州)”)
}
您还可以通过访问其键和值属性来检索字典键或值的可迭代集合
//遍历键
用于stateCapitals.keys中的州{
打印(“状态:\(状态)”)
}
//遍历大写
用于stateCapitals.values中的资本{
打印(“大写:\(大写)”)
}
这是带有所有代码示例的Swift操场:
https://github.com/prelangi/Swift-Playgrounds/tree/master/SwiftCollections.playground