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

Interesting Posts