每天学一点Swift----集合(二)

43 篇文章 0 订阅
42 篇文章 0 订阅

  .字典:字典中以key-value的形式保存数据,所以同一个字典中key不能重复。

  1. 声明字典--两种方式

  1)适宜用泛型。 

     var myMap : Dictionary<String, String>

  2)使用简化语法。

  var scross : [String:Int]  **** 中间是冒号,不是逗号

  var helath : [String : String]

  

  2. 创建字典--两种方式

  1)使用Dictionary的构造器创建字典---init

  init(minimumCapaity: = 2):创建一个至少包含minimumCapacitykey-value

  **** minimumCapacity的默认值是2

  举个栗子:

  myDict = Dictionary<Stirng, String>()  --使用默认的构造器

  score = Dictionary<String, Int>(minimumCapacity : 5)

  

  2)使用简化语法

  health = ["身高":"180", "体重":"80", "血压":"86/113", "呼吸":"56"]

  vardict = ["one":1, "two",2 "three":3, "four":4]

  *****可以看出,使用简化语法时,跟元组不同的地方是括号的区别。

  

  .使用字典

  1. 根据key访问对应的value var value = health["呼吸"]---Java中的getxxx方法方便很多。

  

  2. 访问不存在的key时会返回nil

     ---- 推断出:当程序根据key访问字典中对应的value时,字典返回的并不是对应的value的类型,而是包含value的可选类型——这是因为字典并不确定访问的value是否存在,当key-value存在时返回对应的value,当key-value不存在时返回nil ----   这一点比Java中健壮很多。

     

  3. 由于字典根据key访问时返回的是包含value的可选类型,因此程序需要对字典返回的value使用感叹号进行强制解析。---举个栗子:

  var noExist : Int? = health["no"]

  if noExist != nil

  {

  print(noExist!)  ---注意使用了感叹号进行强制解析

  }else

  {

  print("this is a nil")

  }

  

  4. 修改字典中元素:直接使用key就可以对元素进行修改,如果相应的key-value不存在,则会添加该key-value

  举个栗子:

  health["身高'] = “190”   //直接修改

  health["睡眠"] = “良好”  //进行添加

  

  5. Swift还提供了updateValue()方法来修改字典中的元素,该方法的作用与直接修改相比,强大的一点是可以返回修改之前的value ----当然,返回的也是包含value的可选类型

  举个栗子:

  var result1 = dict.updateValue(10, forKey: "ten")  //返回nil

  var result2 = dict.updateValue(40, forKey: "four") //返回4

  

  6. 使用for-in遍历字典:for-in循环同样也可以用于遍历字典,每次都以元组都形式返回。

  for (str, num) in dict

  {

  print("\(str)-->\(num)")

  }

  

  

  7. 单独使用字典的keys或者values:如果程序中只需要字典的key集或value集,就直接使用字典的keys属性或者values属性,即可返回字典中所有的keyvalue,然后将它们包装成数组即可。

  var keys = ArrAy(dict.keys)

  var values = Array(dict.values)

  

  8. 字典的可变性:使用var声明的是可变的,使用let声明的是不可变的。

  

  9. 字典的修改:

  1)添加、修改:见45

  2)删除:removeValueForKey(key:KeyType):删除指定key对应的value,该方法返回包含value的可选类型。

           removeAll(keepCapacity: bool = false):清空字典。其中keepCapacity参数指定是否保留字典底层的数据缓冲。不传入参数keepCapacity时默认为false

  3)除此之外,Swift还允许将某个key对应的value赋值为nil来删除key-value对。----removeValueForKey相比,这样比较方便,但是不能返回value,而removeValueForKey可以返回value

  

  

  .集合的复制

  1. Swift的集合都是结构体类型,这些结构体类型都是值类型的。

  2. 在值类型赋值或参数传递的时候会复制副本,所赋的值或传递的参数都是原数据的副本。

  

  3. 当集合进行复制时,集合所包含的数据是否也会进行复制取决于聚合所包含的数据类型:如果集合所包含的数据是值类型的,那么复制集合时,集合所包含的数据也会进行复制;如果集合包含的数据是引用类型的,那么集合复制时,程序只是复制集合所包含的引用这些引用实际指向的对象并不会复制。

  

  4. 数组的复制:

  例子1var name = ["唐僧", "孙悟空", "猪八戒", "沙僧"]

  var cp1 = name;

  var cp2 = name;

  name,cp1,cp2各自修改了内容之后会显示各自的结果,互不影响。

  

  例子2:

  class Person

  {

  var name : String

  init(name : String)

  {

  self.name = name;

  }

  }

  

  var persons = [Person(name:"唐僧"), Person(name:"孙悟空"), Person(name:"猪八戒"), 

  Person(name:"沙僧")]

  

  var cp1 = persons;

  var cp2 = persons;

  

  不同于例子1,因为这里数组中的内容是引用(指针)类型,所以尽管复制了内容的副本,但是还是指向相同的对象,其中一个修改时,其他的数组中对应的值也会随着改变。

  

  

  4. 字典的复制:原理同数组的复制。


上一篇:每天学一点Swift----集合(一)

下一篇: 每天学一点Swift----函数(一)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值