swift4.0 数组Array,集合Set和字典Dictionary

swift4.0 数组Array,集合Set和字典Dictionary,第1张

数组是一个可以存放相同类型的多个元素对象的有序线性列表,这些元素可以是任意类型,也可以是元组。但是如果在一个数组中出现在了与其他元素类型不同的元素,那么编译器就会报错。

swift 中还提供了+ *** 作符,可以把两个数组拼接在一起,组成一个新的数组。

数组对象的元素访问:如果访问指定元素,可以通过下标 *** 作符[]来获得,若索引值超出了数组本身大小,那么程序会引发异常

count:获取数组个数

isEmpty:判断数组是否为空

contains( :):判断数组是否包含某个元素

append( :):在该变量数组最后面添加元素

insert(_:at:):在该变量数组指定位置添加元素,原本的元素被移动到新元素后面

remove(at:):在该变量数组中移除指定位置的元素

注意:数组字面量(例如:[1,2,3]),本身是一个常量,如果我们对数组字面量进行添加等 *** 作,则会引起编译器报错。

一个集合也能存放多个相同类型的元素,与数组不同的是:

1:一个集合不允许出现两个相同的元素

2:集合中的元素是无序的

3:并不是所有的类型对象都能作为集合的元素,不过swift的基本类型都可以

元素集合的访问不能像数组通过索引值,因为它是无序的,可以通过for-in循环,也可以通过flatMap方法,有选择性的将集合元素取出。

count:获取集合个数

isEmpty:判断集合是否为空

contains( :):判断集合是否包含某个元素

insert( :at:):在该变量集合指定位置添加元素,如以存在,原本的元素被覆盖,保证唯一性

remove(at:):在该变量集合中移除指定位置的元素

字典与数组和集合不同,它是以一种键-值对的形式存储元素的,字典中不允许出两个相同的键,但是不同的键可以对应相同的值,字典的元素也是无序的。字典中键的类型与值的类型都是在声明中直接确定的,每个键的类型应该一致,每个值的类型也应该一致,键的类型和值的类型可以相同也可以不同。

对字典的值的访问类似于数组对元素的访问,可以通过下标 *** 作符对字段的值进行访问,例如对于一个这样的字典对象dict[String :Int],我们可以通过dict["String"] 的方式来访问键“String”对应的值,不过这里得到的值是一个Optional对象,因为如果指定的键对应的值不存在,会返回空。

count: 获取字典的键值对元素个数

isEmpty:判断字典是否为空

keys:获取字典对象的所有键值

values:获取字典对象的所有值

updateValue(_:forKey:):更新一个键对应的值

removeValue(forKey:): 将指定的键的元素移除

注意:这里的keys和values返回的类型为LazyMapCollection,它与集合类型类似,不能通过下标访问元素,一般通过for-in循环迭代访问;变量字典还能通过调用下标方式来新增一个键值对或修改一个键对应的值。

中括号[ ] 表示,数组值之间用逗号分隔

1,如果数组声明为常量,则本身不能修改,且数组中的值也不能修改

2,指定数组的类型,语法:Array<Type>可以简写为 [Type]

4,当检测到数组中的元素相同的时候是 Swift类型的数组

当检测数组中的元素类型不同的时候, 则是OC类型的数组

如果想变成NSMutableArray则要显式的声明

5, var nullArray = [] 创建的是NSArray的数组类型, 因为Swift编译器不能推导数组类型

6,创建Swift空数组

7,创建初始化长度为4的Int数组, 并且这四个元素的初始化的值都是2

8,数组相加即为合并数组

9,

区间范围和等号右侧的元素个数不同, 元素多则插入,元素少去除多余的区间

max 和 min超过了数组的上下边界,则直接抛出异常

10, append insert removeall 都没有返回值

removelast removeAtIndex有返回值,返回被移除的值

empty判断是否为空, count计算数组的个数

11, 数组可以使用符合加法进行赋值 += 来追加元素的个数

12, 枚举数组中的元素

for...in 用变量或者下标都行

for(index, value) in enumerate(fourInt){}

1,字典使用中括号,key-value之间用逗号隔开, key:value的形式

如果字典中的key和value不是String类型的, 则不需要使用引号

2

3, 类型不同则是OC类型的NSDictionary, 若要是NSMutableDictionary 则显式声明

4,用let声明的字典,不仅字典本身不能再被修改,而且字典中的值也不能别修改

5,

6, dict[key] = value 如果有原来的key则修改, 没有则添加

7, updataValue方法返回修改前的值, dict[key] = nil 删除key-value

removeValueForKey 指定要删除数据的key, 并且返回待删除的value

8,

as! as? 同类型的 OC和Swift之间的转换

Int类型的 NSObject类型值转换成Int类型,不需要可选类型而是要加上!

as [String : Any]转换成Swift中的字典

9,遍历字典

当字典是NSDictionary的时候, 可以先将其转换成Dictionary的格式,然后再使用Keys 和 values属性获取相应的key 和 value

Swift 字典用来存储无序的相同类型数据的集合,Swift字典会强制检测元素的类型,如果类型不同则会报错。

Swift字典每个值(value)都关联唯一的键(key),键作为字典中的这个值数据的标识符。

和数组中的数据项不同,字典中的数据项并没有具体顺序。我们在需要通过标识符(键)访问数据的时候使用字典,这种方法很大程度上和我们在现实世界中使用字典查字义的方法一样。

Swift字典的key没有类型限制可以是整型或字符串,但必须是唯一的。

如果创建一个字典,并赋值给一个变量,则创建的字典就是可以修改的。这意味着在创建字典后,可以通过添加、删除、修改的方式改变字典里的项目。如果将一个字典赋值给常量,字典就不可修改,并且字典的大小和内容都不可以修改。

[objc] view plain copy

在CODE上查看代码片派生到我的代码片

// 创建字典

// 创建一个特定类型的空字典,格式为:var dict = [KeyType: ValueType]()

// 创建一个空字典,键的类型为 Int,值的类型为 String 的简单语法:

var dict01 = [Int: String]()

print(dict01)

// 创建一个字典的实例:

var dict02 :[Int:String] = [1:"One", 2:"Two", 3:"Three"]

print(dict02)

var dict03 = ["name":"DevZhang", "job":"iOSDev", "company":"VSTECS"]

print(dict03)

[objc] view plain copy

在CODE上查看代码片派生到我的代码片

// 访问字典

// 我们可以根据字典的索引来访问数组的元素,语法如下:var value = dict[key]

let value01 = dict02[1]

print(value01)

let value02 = dict03["name"]

print(value02)

[objc] view plain copy

在CODE上查看代码片派生到我的代码片

// 添加数据

let value03 = dict02.updateValue("Four", forKey: 4) //或 dict02[4] = "Four"

print(value03)

print(dict02)

[objc] view plain copy

在CODE上查看代码片派生到我的代码片

// 修改字典

// 方法1 使用 updateValue(forKey:) 增加或更新字典的内容。如果 key 不存在,则添加值,如果存在则修改 key 对应的值。格式为:dict.updateValue(value, forKey:key)方法返回Optional值。

var value04 = dict02.updateValue("TwoTmp", forKey: 2)

print(dict02)

print(value04)

// 方法2 通过指定的 key 来修改字典的值

var value05 = dict02[3]

print(value05)

value05 = "ThreeTmp" // 修改无效

print(dict02)

dict02[3] = "ThreeTmp" // 修改有效

print(dict02)

[objc] view plain copy

在CODE上查看代码片派生到我的代码片

// 移除 Key-Value 对

// 1 使用 removeValueForKey() 方法来移除字典 key-value 对。如果 key 存在该方法返回移除的值,如果不存在返回 nil 。

let valueRemove01 = dict02.removeValueForKey(2)

print(valueRemove01)

print(dict02)

// 2 通过指定键的值为 nil 来移除 key-value(键-值)对。

dict02[1] = nil

print(dict02)

[objc] view plain copy

在CODE上查看代码片派生到我的代码片

// 遍历字典

// 1 使用 for-in 循环来遍历某个字典中的键值对。

for (key, value) in dict03

{

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

}

// 2 使用enumerate()方法来进行字典遍历,返回的是字典的索引及 (key, value) 对

for (key, value) in dict03.enumerate()

{

print("字典 key \(key) - 字典 (key, value) 对 \(value)")

}

// 3

for key in dict03.keys

{

let value = dict03[key]

print("key = \(key), value = \(value)")

}

[objc] view plain copy

在CODE上查看代码片派生到我的代码片

// 字典转换为数组

// 提取字典的键值(key-value)对,并转换为独立的数组。

let dictKeys = [String](dict03.keys)

for (key) in dictKeys

{

print("\(key)")

}

let dictValues = [String](dict03.values)

for (value) in dictValues

{

print("\(value)")

}

[objc] view plain copy

在CODE上查看代码片派生到我的代码片

// count 属性

let count01 = dict03.count

print(count01)

[objc] view plain copy

在CODE上查看代码片派生到我的代码片

// isEmpty 属性

let empty01 = dict01.isEmpty

print("dict01 is \(empty01)")

let empty02 = dict03.isEmpty

print("dict03 is \(empty02)")


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7920893.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-11
下一篇2023-04-11

发表评论

登录后才能评论

评论列表(0条)

    保存