swift 6. 字典
swift 6. 字典标签:swift 这一节,继续上一讲的数组,继续学习集合里面的字典。字典故名思议,有索引,有值,所以才叫字典,也就是一个键值对的合集,它是无须的。所以,如何理解swift的字典呢,就是php中的索引数组。这样就好理解多了。 字典长啥样在学习如何申明一个字典之前呢,我们看下字典长啥样? ["TYO": "Tokyo","DUB": "Dublin"]
["TYO": 45,"DUB": 66]
看,字典就长这样,就是一个一个 申明一个字典在知道字典长这样了之后,我们或许已经知道如何创建一个字典呢。先从最原始的来申明创建: var userinfo: Dictionary<String,String> = ["name": "yangyi","gender": "male"]
这种申明比如原始:先定义它是什么类型的字典,我们用 上面是申明字典并且附上值,那么如何创建空的字典呢。有下面4种方法: // 创建空字典
var emptyDictionary1:[String:Int] = [:]
var emptyDictionary2:Dictionary<Int,String> = [:]
var emptyDictionary3 = [String:String]()
var emptyDictionary4 = Dictionary<Int,Int>()
记住,最后的括号()不能丢! 我们顺便来回顾一下,前面的几节当中,如何原始的申明一个变量,并且附上空值的: //整型
var init1:Int = 3
//字符型
var string2:String = "iphone"
//布尔值
var bool1:Bool = false
//浮点型
var float1:Float = 1.234
//元祖
var tuples1:(Int,String,Int) = (1,"wer",12)
//访问tuples1.0,tuples1.1,tuples1.2
var tuples2 = (se:12,we:33)
//访问tuples2.se,tuples2.we
//数组
var array1:[String] = ["iphone","mac","ipad"]
var array2:[Int] = [1,2,3]
//申明空值数组
var array3 = [String]()
//申明有默认值的数组
var array4 = [String](count: 2,repeatedValue: "we")
var array5 = Array(count: 2,repeatedValue: "we")
访问和修改字典上面讲了申明了一个字典,那怎么访问呢?其实,和访问数组的方式基本一样,只不过要用key var userinfo2 = ["name":"yangyi","gender":"male"]
print(userinfo2["name"]) //输出的是可选类型的:Optional("yangyi")
//我们如何确认name存在,则可以用!来强制解包
print(userinfo2["name"]!) //输出:yangyi
//所以结合前面的可选型的用法,来解包:
if let name = userinfo2["name"]{
print("nams is" + name) //输出:name is yangyi
}
var userinfo3 = [0:"yangyi",1:"male"]
print(userinfo3[1]) //输出:male
print(userinfo2.name) //报错了,你看搞混了吧。元祖才可以这样写!!
所以,同样,我们也是用 var d2 = Dictionary<Int,String>() //空的
d2[1] = "qw"
d2[4] = "rt"
print(d2) //输出: [4: rt,1: qw]
var d3 = ["name":"yangyi","gender":"male"]
d3["name"] = "liming" // 讲name改成了liming
d3["height"] = "190" // 新加一个key height,值为190
//d3["name"] = 33 // 报报错,不能将一个string转换成int型
print(d3) // [name: liming,gender: male,height: 190]
swift中呢,还有一个专门来跟新字典的方法函数叫 var d3 = ["name":"yangyi","gender":"male"]
var oldname = d3.updateValue("wangming",forKey: "name")
//讲name这个key替换成wangming
print(oldname) //原来的值为:Optional("liming")
print(d3) // [name: wangming,height: 190]
下面是nil的情况: var d3 = ["name":"yangyi","gender":"male"]
var oldage = d3.updateValue("12",forKey: "age")
//讲age这个key替换成12。但是,却是不存在这个age这key的,所以值是nil
print(oldage) //nil
print(d3) // age加进去了 ["gender": "male","age": "12","name": "yangyi"]
字典删除或置空我们赋值一个字典后,如果想要把这个字典重新赋值为空,可以直接这样: var d1 = ["name":"yangyi","gender":"mail"]
println(d1) // [name: yangyi,gender: mail]
d1 = [:] //置空
print(d1) // []
有时候,我们并不想把所有的字典里面的元素给置空或删除,只是想把其中的某一个key给干掉,用 var d1 = ["name":"yangyi","gender":"mail"]
d1["name"] = nil //把key name给干掉了
print(d1) // 输出为:[gender: mail]
有这种常见的方式移除,那么肯定有一个函数方法来移除某一个key了,swift一般是按照常理出牌的,它就是 var oldgender = d1.removeValueForKey("gender")
print(oldgender) //可选值:Optional("mail")
print(d1) / 被移除了:[name: yangyi]
var d1 = ["name":"yangyi","gender":"mail"]
d1.removeAll()
字典常用的方法和函数
var dict = ["name":"xiaoming"]
// 字典数据数量
dict.count // 1
// 判断字典是否为空
var dict = ["name":"xiaoming"]
dict.isEmpty // false
var emptyDictionary1:[String:Int] = [:]
emptyDictionary1.isEmpty //true
字典的遍历我们来是这样手动的方式来访问字典的确不太好,既然是一个数据,那么是肯定是可以用for来遍历的,可以使用for-in循环来遍历某个字典中的键值对。每一个字典中的数据项都由(key,value)元组形式返回: var d9 = ["name":"yangyi","gender":"mail"]
//用元祖的形式来遍历字典
for (key,value) in d9 {
print("键为(key),值为(value)")
}
//键为name,值为yangyi
//键为gender,值为mail
我们也可以通过访问字典的 var d9 = ["name":"yangyi","gender":"mail"]
for key in d9.keys {
print("键为(key)")
}
//键为name
//键为gender
for value in d9.values {
print("值为(value)")
}
//值为yangyi
//值为mail
print(d9.values)
// LazyMapCollection<Dictionary<String,String>,String>
上面我们打印了d9.values 得到的是一个字典集合,我们可以直接把它变成数组,因为理论上它就是一个数组的形式: var d9 = ["name":"yangyi","gender":"mail"]
var keyinfo = Array(d9.keys)
var valueinfo = Array(d9.values)
print(keyinfo) // [name,gender]
print(valueinfo) // [yangyi,mail]
字典的比较由于字典是无须的,而且,swift中对于2个类型的值的比较,是比较值的,而不是引用。所以2个字典,只要值一样,顺序不同,也是一样: let dict1 = [1:"A",2:"B",3:"C"]
let dict2 = [1:"A",3:"C",2:"B"]
dict1 == dict2 //true
OK,字典基本的内容就讲完了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |