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

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

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

(1)适宜用泛型。

var myMap : Dictionary

(2)使用简化语法。

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

var helath : [String : String]

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

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

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

**** minimumCapacity的默认值是2。

举个栗子:

myDict = Dictionary()--使用默认的构造器

score = Dictionary(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属性,即可返回字典中所有的key或value,然后将它们包装成数组即可。

var keys = ArrAy(dict.keys)

var values = Array(dict.values)

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

9.字典的修改:

(1)添加、修改:见4、5

(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.数组的复制:

例子1:var 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----集合(二))