美文网首页
第十二章 Swift 字典

第十二章 Swift 字典

作者: 我有小尾巴快看 | 来源:发表于2019-06-04 17:50 被阅读0次

    Swift 字典是结构体,无序的数据集合,字典的key没有类型限制可以是整型或字符串,但必须是唯一的。

    1.创建字典

    我们可以使用以下语法来创建一个特定类型的空字典:
    var someDict =  [KeyType: ValueType]()
    
    以下是创建一个空字典,键的类型为 Int,值的类型为 String 的简单语法:
    var someDict = [Int: String]()
    
    以下为创建一个字典的实例:
    var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
    

    2.访问字典

    我们可以根据字典的索引来访问数组的元素 var someVar = someDict[key]

    var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
    
    var someVar = someDict[1]
    
    print( "key = 1 的值为 \(someVar)" )
    print( "key = 2 的值为 \(someDict[2])" )
    print( "key = 3 的值为 \(someDict[3])" )
    
    // key = 1 的值为 Optional("One")
    // key = 2 的值为 Optional("Two")
    // key = 3 的值为 Optional("Three")
    

    3.修改字典

    我们可以使用 updateValue(forKey:) 增加或更新字典的内容。如果 key 不存在,则添加值,如果存在则修改 key 对应的值。updateValue(_:forKey:)方法返回Optional值。实例如下:

    var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
    
    var oldVal = someDict.updateValue("One 新的值", forKey: 1)
    
    var someVar = someDict[1]
    
    print( "key = 1 旧的值 \(oldVal)" )
    print( "key = 1 的值为 \(someVar)" )
    print( "key = 2 的值为 \(someDict[2])" )
    print( "key = 3 的值为 \(someDict[3])" )
    
    // key = 1 旧的值 Optional("One")
    // key = 1 的值为 Optional("One 新的值")
    // key = 2 的值为 Optional("Two")
    // key = 3 的值为 Optional("Three")
    

    你也可以通过指定的 key 来修改字典的值,如下所示:

    var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
    
    var oldVal = someDict[1]
    someDict[1] = "One 新的值"
    var someVar = someDict[1]
    
    print( "key = 1 旧的值 \(oldVal)" )
    print( "key = 1 的值为 \(someVar)" )
    print( "key = 2 的值为 \(someDict[2])" )
    print( "key = 3 的值为 \(someDict[3])" )
    
    // key = 1 旧的值 Optional("One")
    // key = 1 的值为 Optional("One 新的值")
    // key = 2 的值为 Optional("Two")
    // key = 3 的值为 Optional("Three")
    

    4.移除 Key-Value 对

    我们可以使用 removeValueForKey()方法来移除字典 key-value 对。如果 key 存在该方法返回移除的值,如果不存在返回 nil 。实例如下:

    var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
    
    var removedValue = someDict.removeValue(forKey: 2)
    
    print( "key = 1 的值为 \(someDict[1])" )
    print( "key = 2 的值为 \(someDict[2])" )
    print( "key = 3 的值为 \(someDict[3])" )
    
    // key = 1 的值为 Optional("One")
    // key = 2 的值为 nil
    // key = 3 的值为 Optional("Three")
    

    你也可以通过指定键的值为 nil 来移除 key-value(键-值)对。实例如下:

    var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
    
    someDict[2] = nil
    
    print( "key = 1 的值为 \(someDict[1])" )
    print( "key = 2 的值为 \(someDict[2])" )
    print( "key = 3 的值为 \(someDict[3])" )
    
    // key = 1 的值为 Optional("One")
    // key = 2 的值为 nil
    // key = 3 的值为 Optional("Three")
    

    5.遍历字典

    我们可以使用 for-in 循环来遍历某个字典中的键值对。

    var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
    
    for (key, value) in someDict {
       print("字典 key \(key) -  字典 value \(value)")
    }
    
    // 字典 key 2 -  字典 value Two
    // 字典 key 3 -  字典 value Three
    // 字典 key 1 -  字典 value One
    

    我们也可以使用enumerate()方法来进行字典遍历,返回的是字典的索引及 (key, value) 对,实例如下:

    var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
    
    for (key, value) in someDict.enumerated() {
        print("字典 key \(key) -  字典 (key, value) 对 \(value)")
    }
    
    字典 key 0 -  字典 (key, value) 对 (2, "Two")
    字典 key 1 -  字典 (key, value) 对 (3, "Three")
    字典 key 2 -  字典 (key, value) 对 (1, "One")
    

    6.字典转换为数组

    你可以提取字典的键值(key-value)对,并转换为独立的数组。实例如下:

    var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
    
    let dictKeys = [Int](someDict.keys)
    let dictValues = [String](someDict.values)
    
    print("输出字典的键(key)")
    
    for (key) in dictKeys {
        print("\(key)")
    }
    
    print("输出字典的值(value)")
    
    for (value) in dictValues {
        print("\(value)")
    }
    
    /*
    输出字典的键(key)
    2
    3
    1
    输出字典的值(value)
    Two
    Three
    One
    */
    

    7.count 属性

    我们可以使用只读的 count 属性来计算字典有多少个键值对:

    var someDict1:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
    var someDict2:[Int:String] = [4:"Four", 5:"Five"]
    
    print("someDict1 含有 \(someDict1.count) 个键值对")
    print("someDict2 含有 \(someDict2.count) 个键值对")
    
    // someDict1 含有 3 个键值对
    // someDict2 含有 2 个键值对
    

    8.isEmpty 属性

    我们可以通过只读属性isEmpty 来判断字典是否为空,返回布尔值:

    var someDict1:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
    var someDict2:[Int:String] = [4:"Four", 5:"Five"]
    var someDict3:[Int:String] = [Int:String]()
    
    print("someDict1 = \(someDict1.isEmpty)")
    print("someDict2 = \(someDict2.isEmpty)")
    print("someDict3 = \(someDict3.isEmpty)")
    
    someDict1 = false
    someDict2 = false
    someDict3 = true
    

    9. Map函数

    filter:根据闭包条件对字典进行过滤,返回一个新字典
    map:返回根据闭包返回值组成的数组

    let dic = ["a" : 1, "b" : 2, "c" : 2]
    let dic1 = dic.filter({ $0.key == "a" })
    let dic2 = dic.filter({ $0.value == 2 })
    print(dic1)
    print(dic2)
    
    let dic3 = dic.map({ $0.key })
    let dic4 = dic.map({ $0.value })
    print(dic3)
    print(dic4)
    
    // ["a": 1]
    // ["c": 2, "b": 2]
    // ["c", "b", "a"]
    // [2, 2, 1]
    

    其他函数暂不介绍,请自行了解。

    相关文章

      网友评论

          本文标题:第十二章 Swift 字典

          本文链接:https://www.haomeiwen.com/subject/nqyrxctx.html