字典

key它必须是可哈希的,也就是说,它必须能够提供一个方式让自己被唯一表示出来。Swift的所有基础类型(例如String、Int、Double和Bool)默认都是可哈希的,这些类型都能够用作字典中的键。枚举成员中没有绑定值的值(参见枚举)默认也是可哈希的。 而值可以是NSobjcet的类型

不可变字典 let



let dictA = ["key1":"value1","key2":"value2","key3":4]

print(dictA["key3"])



可变字典 var 字典的键值对的类型 是根据初始化时候的类型来决定的,类型是后面无法改变的

①第一种字典:

可以存放任意类型的字典 比如 键值对(key:value) 可以是数组



let array = [1,2,3,4,5]

var dictB = [1:"value1","2":"value2","key3":"value3","key4":array]



获取dictB 对应的所有的key



for key in dictB.keyEnumerator() {
    print(key)
}
print("dictB==\(dictB)")



②第二种字典

swift的 Dictionary 类型的字典 存放 一些基本 类型的键值对


var dictM:Dictionary = ["1":"value1","2":"value2","key3":"value3","key4":"4"]



获取字典元素个数



dictM.count



将一个键值对插入字典中



dictM["key6"] = "5"



修改字典中某一个key对应的value值



dictM["1"] = "change"



更新字典的键值对.如果存在相同的键,那么就更新对应的值!如果不存在,就将新的键值对放入字典

updateValue(forKey:)函数返回一个值的类型的可选值。例如一个值类型为String的字典,该函数返回值的类型为String?。如果更新前该键的值存在,函数返回值就是该键更新前的值,如果不存在,函数返回值就是nil:  这让你能够检测是否发生了值的更新。



let oldValue = dictM.updateValue("9", forKey: "1")



因为key"1" 之前存在,所以 oldVaue 的值就为更新前的值



if oldValue == nil {
    print("oldValue--不存在-->\(oldValue)")
}else{
    print("oldValue--存在-->\(oldValue)")
}

打印结果  

oldValue--存在-->Optional("change")



因为key"new" 之前不存在,所以 newvalue 为 nil 



if newValue == nil {
print("newValue==不存在===\(newValue)")
}else{
print("newValue==存在===\(newValue)")
}

打印结果

newValue==不存在===nil



移除键值对

根据key 值移除, 会有一个返回值,根据返回值是否为nil 来判断时候移除成功,如果移除成功 会返回被移除的key对应的value值,如果key不存在或者移除失败那么返回nil



let move = dictM.removeValueForKey("ker9")

if move == nil {

    print("move=nil==\(move)")

}else {

    print("move=success==\(move)")

}

print(dictM)



移除所有元素, 如果keepCapacity为True,则保留字典原有的存储空间。



dictM.removeAll(keepCapacity: true)



遍历字典



for (key,value) in dictM {

    print("\(key)----\(value)")

}



获取字典所有的key



for key in dictM.keys {
    print("====\(key)")
}



获取字典所有的value



for value in dictM.values{

    print(value)

}



将字典的key或者value 作为数组的元素 组成新的数组



let arraykey = [String](dictM.keys)

 let arrayValue = [String](dictM.values)

print(arrayValue)