zoukankan      html  css  js  c++  java
  • Swift字典集合

    字典表示一种非常复杂的集合,允许按照某个键来访问元素。字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合。键集合是不能有重复元素的,而值集合是可以重复的,键和值是成对出现的。

    如下图所示是字典结构的“学号与学生”集合,学号是键集合,不能重复,学生是值集合,可以重复。

     

    提示 字典中键和值的集合是无序的,即便在添加的时候是按照顺序添加的,当取出这些键或值的时候,也会变得无序。字典集合更适合通过键快速访问值,就像查英文字典一样,键就是要查的英文单词,而值是英文单词的翻译和解释等。有的时候,一个英文单词会对应多个翻译和解释,这也是与字典集合特性对应的。

    一、字典声明与初始化

    Swift为字典提供了Dictionary结构体类型,我们在声明一个字典的时候可以使用下面的语句。

    var studentDictionary: Dictionary<Int, String>

    其中,变量studentDictionary明确指定类型为Dictionary<Int, String>。其中<Int, String>是泛型,这表明键的集合是Int类型,值的集合是String类型。

    上面声明的集合事实上还不能用,还需要进行初始化,集合类型往往是在声明的同时进行初始化的。示例代码如下:

    [html] view plaincopy
     
    1. var studentDictionary1: Dictionary<Int, String> = [102 : "张三",105 : "李四", 109 : "王五"] ①  
    2.    
    3. var studentDictionary2 = [102 : "张三",105 : "李四", 109 : "王五"]    ②  
    4.    
    5. let studentDictionary3 = [102 : "张三",105 : "李四", 109 : "王五"]            ③  
    6.    
    7. var studentDictionary4 = Dictionary<Int, String>()            ④  

    上述代码都是对字典进行声明和初始化,代码①~③行采用[102 : "张三",105 : "李四", 109 : 
    "王五"]的方式进行初始化,这是字典的表示方式,语法如下图所示。

     

    这个语法类似于JSON中的对象,字典以“{”(左括号)开始,以“}”(右括号)结束。每个键后跟一个“:”(冒号),“键-值”对之间使用“,”(逗号)分隔。

    第③行是let声明字典,let声明的字典是不可变字典,必须在声明的同时初始化,一旦被初始化就不可以被修改。

    代码第④行是初始化一个空的字典,键集合为Int类型,值集合为String,初始化后没有任何元素。

    二、字典的修改

    我们可以对字典中的元素进行追加、删除和替换等修改操作。字典元素的追加比较简单,只要给一个不存在的键赋一个有效值,就会追加一个“键-值”对元素。

    字典元素删除有两种方法,一种是给一个键赋值为nil,就可以删除元素;另一种方法是通过字典的removeValueForKey方法删除元素,方法返回值是要删除的值。

    字典元素替换也有两种方法,一种是直接给一个存在的键赋值,这样新值就会替换旧值;另一种方法是通过updateValue(forKey:)方法替换,方法的返回值是要替换的值。

    下面我们来看一个示例:

    [html] view plaincopy
     
    1. var studentDictionary = [102 : "张三",105 : "李四", 109 : "王五"] ①  
    2.    
    3. studentDictionary[110] = "董六"           ②  
    4.    
    5. println("班级人数:(studentDictionary.count)")          ③  
    6.    
    7. let dismissStudent = studentDictionary.removeValueForKey(102)       ④  
    8.    
    9. println("开除的学生:(dismissStudent)")          ⑤  
    10.    
    11. studentDictionary[105] = nil            ⑥  
    12.    
    13. studentDictionary[109] = "张三"           ⑦  
    14.    
    15. let replaceStudent = studentDictionary.updateValue("李四", forKey:110)    ⑧  
    16. println("被替换的学生是:(replaceStudent)")            ⑨  

    输出结果如下:

    班级人数:4

    开除的学生:张三

    被替换的学生是:董六

    上述代码第①行是声明并初始化字典studentDictionary,第②行代码追加键为110、值为“董六”的一个元素,第③行代码是打印班级学生的人数,count是字典的属性,返回字典的长度。

    第④行和第⑥行都是删除元素,第④行代码是使用removeValueForKey方法删除元素,dismissStudent是返回值,它保持了被删除的元素。因此我们在第⑤行打印输出dismissStudent是“开除的学生:张三”。第⑥行studentDictionary[105] = nil语句是直接赋值nil也可以删除105对应的元素。

    第⑦行和第⑧行都是替换旧元素,如果第⑦行的键不存在,那么结果是在字典中追加一个新的“键-值”对元素。第⑧行是通过updateValue(forKey:)方法替换元素,方法的返回值是“董六”,第⑨行代码是打印“被替换的学生是:董六”。

    三、字典遍历

    字典遍历集合也是字典的重要操作。与数组不同,字典有两个集合,因此遍历过程可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历。这些遍历过程都是通过for in循环实现的。

    下面是遍历字典的示例代码:

    [html] view plaincopy
     
    1. var studentDictionary = [102 : "张三",105 : "李四", 109 : "王五"]  
    2.    
    3. println("---遍历键---")  
    4. for studentID in studentDictionary.keys {           ①  
    5.     println("学号:(studentID)")  
    6. }  
    7.    
    8. println("---遍历值---")  
    9. for studentName in studentDictionary.values {           ②  
    10.     println("学生:(studentName)")  
    11. }  
    12.    
    13. println("---遍历键:值---")  
    14. for (studentID, studentName) in studentDictionary {     ③  
    15.     println ("(studentID) : (studentName)")  
    16. }  

    运行结果如下:

    ---遍历键---

    学号:105

    学号:102

    学号:109

    ---遍历值---

    学生:李四

    学生:张三

    学生:王五

    ---遍历键:值---

    105 : 李四

    102 : 张三

    109 : 王五

    从上述代码可见,我们有3种方法遍历字典,它们都采用了for in语句。第①行代码遍历了键集合,其中keys是字典属性,可以返回所有键的集合。第②行代码遍历了值的集合,其中values是字典属性,可以返回所有值的集合。第③行代码遍历取出的字典元素,(studentID, studentName)是元组类型,它是由键变量studentID和值变量studentName组成的。

    更多内容请关注国内第一本Swift图书《Swift开发指南》
    本书交流讨论网站:http://www.51work6.com/swift.php
    欢迎加入Swift技术讨论群:362298485

    欢迎关注智捷iOS课堂微信公共平台

  • 相关阅读:
    shutdown -s -t
    企业计算模式
    数组的合并
    Cytoscape基础教程笔记
    初识Uniprot API
    常用生物信息 ID 及转换方法
    Gene Ontology (GO) 注释
    KEGG注释
    Install packages failed: Installing packages: error occurred. ------简单的问题常常会被忽略
    Cytoscape,Gephi ,mitlab network的比较
  • 原文地址:https://www.cnblogs.com/iOS-Blog/p/3960780.html
Copyright © 2011-2022 走看看