Swift第二篇(字典&集合)

2017-11-30  本文已影响11人  考槃在涧

Swift字典:Dictionary

Swift中的字典Dictionary与Foundation中的NSDictionary是桥接的,可以互相转换使用。

Swift中定义字典的方法类似于Array也有两种写法:

var dic1:[String:String]
let dic2:Dictionary<String,String>

注意:使用var定义的字典是可变字典,相当于NSMutableDictionary,使用let定义的字典是不可变字典,相当于NSDictionary。前面说到的数组、字符串类似。

Swift在显式声明字典的类型的时候也需要分别确定字典中key和value的类型,类似于Array

创建一个空字典:

var dic = [String:String]()
let dic2 = Dictionary<String,String>()

初始化字典:

let dic = ["nihao":"Hello","dier":"next"]    // 不可变字典
var dic = ["nihao":"Hello","dier":"next"]    // 可变字典

使用dict.isEmpty来判断字典是否为空(对数组也可以使用)。或者可以通过判断字典里的元素数量是否为0:dict.count同样对数组适用。

获取字典中的元素

和OC中的方法一样,可以直接通过索引来获取字典中的元素:

let dict = ["apple":"苹果","pear":"梨"]
var fruit = dict["apple"]

读取字典时,可以直接判断字典是否有这个值:

if let value = dic["nihao"] {
   print("----------------->\(value)")  // 如果能够通过这个索引找到就输出
}else{
   print("没有这个东西")
}

修改字典中的元素:

可以直接通过下标来修改或添加元素:

dict["banana"] = "香蕉"   // 如果存在  就修改之前内容,如果不存在 就增加一条
dic.updateValue("banana", forKey: "香蕉")  // 方法效果与上相同

移除元素:

// 通过下标移除
dict["banana"] = nil
// 或者调用方法 removeValueForKey
dic.removeValue(forKey: "banana")

遍历字典:

字典的遍历方式类似于数组:

// 遍历字典
for (key,value) in dic {
       print("Key is:\(key),Value is :\(value)")
}

// 分别遍历字典的key 、value
for key in dic.keys {
      print(key)
}
        
for value in dic.values {
      print(value)
}

字典的key或value转换成数组

let keys = [String](dic.keys)
let values = Array<String>(dic.values)
print("\(keys)&\(values)")

Swift集合:Set

集合(Set)用来存储一些类型相同但没有确定顺序的值。当集合元素顺序不重要或者希望确保每个元素只出现一次时可以使用集合而不是数组来进行存储。

Swift中Set的类型写法为Set<Element>,这里的Element表示Set中允许存储的数据类型,集合与数组、字典不同的是:集合没有简化的写法,只有这一种写法。

var set = Set<String>() // 创建一个空的集合
set.count // 集合内元素的个数

初始化集合的方法

var set:Set<String> = ["milk","beef"] // 用数组构造集合(需要显式声明类型,因为如果不显式声明就成了数组)
var set:Set = ["Hello","Hi"] // 如果元素类型相同,初始化时可以省略类型

集合也可以用isEmpty来判断是否为空,可以用set.contains("milk")来判断元素是否在集合中(适用字符串、数组)。

遍历集合

 for value in set {
     print("==========>\(value)")
 }

集合的基本操作

var set1: Set = [1, 2, 3, 4, 5]
let set2: Set = [1, 4, 3, 8]
// 求两个集合的交集
// 3, 1, 4
print(set1.intersection(set2))
// 求两个集合的并集
// 1, 2, 3, 4, 5
print(set1.union(set2))
// 求集合set1与set2的并集 去掉 集合set1与set2的交集 部分
// 2, 5, 8
print(set1.symmetricDifference(set2))
// 求集合set1去掉set1与set2的交集部分
// 2, 5
set1.subtract(set2)
print(set1)

*注:subtract()方法是会改变set1的值,其他方法不会改变。

集合之间的关系

let set1: Set = [1, 2, 3, 4, 5]
let set2: Set = [1, 4, 3, 8]
// false
// set1是否set2的子集
print(set1.isSubset(of: set2))
let set3: Set = [1, 2, 5]
// true
// set3全部在set1中
print(set3.isSubset(of: set1))
// true
// set1真包含set3,因此set1是set3的超集
print(set1.isSuperset(of: set3))
// true
// set1是set3的严格超集,因为Set1真包含set3且set1 
print(set1.isStrictSuperset(of: set3))
// true
// set1真包含set3,且set1 != set3,因此set3是set1
print(set3.isStrictSubset(of: set1))
let set4: Set = [1, 5, 2]
// false
// 因为set3和set4的元素是一样的,即相等
print(set4.isStrictSubset(of: set3))
// false
// 这两个集合中有相同的元素
print(set3.isDisjoint(with: set4))
let set5:Set = [9, 6]
// true
// set5和set4没有相同的元素
print(set5.isDisjoint(with: set4))

学习使我快乐

上一篇下一篇

猜你喜欢

热点阅读