Swift入坑系列—集合类型
- 数组(Arrays)
- 字典(Dictionaries)
数组(Arrays)
在OC里面,NSArray和NSMutableArray这两个类可以存储任意类型的对象,并且不提供所返回对象的任何特别信息。
在Swift中,数据值被存入某个数组之前类型必须明确。方法是通过显式的类型标注或者类型推断,而且不是必须是class类型。
//定义了一个存储 字符串类型 的可变数组('var'字段修饰)
var shoppingList: [String] = ["Eggs", "Milk"]
//定义了一个存储 字符串类型 的不可变数组('let'字段修饰)
let peopleList: [String] = ["Danny", "Mike", "Johnnie"]
Note:
当然你也可以省略类型标注,因为Swift可以根据你的内容推断出正确的类型,如下面的代码。
var shoppingList = ["Eggs", "Milk"]
创建并构造数组
//创建一个整型空数组
var array1 = [Int]()
//创建一个特定大小,并且所有数据都为默认的整型数组
var array2 = [Int](count: 3, repeatedValue:1)
//创建一个特定大小,并且数据类型为默认的推断为浮点型的数组
var array3 = [](count: 3, repeatedValue:2.5)
数组的增删改查
增(插入数据)
Swift中往数组里面插入数据有多种方式:
1)append()方法shoppingList.append("Flour")2)
insert(atIndex:)方法shoppingList.insert("Maple Syrup", atIndex: 0)3)
+=赋值运算符shoppingList += ["Baking Powder"]删(删除数据)
通过
removeAtIndex()方法移除指定位置的数据项。这个方法把数组在特定索引值中存储的数据项移除并且返回这个被移除的数据项(返回的数据项如果不用的时候可以无视):let mapleSyrup = shoppingList.removeAtIndex(0)通过
removeLast()方法可以移除最后一项数据项let apples = shoppingList.removeLast()改(更新数据)
//通过指定某一项更新数据项
shoppingList[0] = "Six eggs" //通过区间更新区间内数据项
shoppingList[4...6] = ["Bananas", "Apples"]Note:
我们不能使用下标语法在数组尾部添加新项。如果我们试着用这种方法对索引越界的数据进行检索或者设置新值的操作,我们会引发一个运行期错误。我们可以使用索引值和数组的count属性进行比较来在使用某个索引之前先检验是否有效。除了当count等于 0 时(说明这是个空数组),最大索引值一直是count - 1,因为数组都是零起索引查(访问数据)
//获取第0项数据并赋值给变量firstItem
var firstItem = shoppingList[0] //获取某个区间的数据项并赋值给另外一个数值
let tempArr = shoppingList[1...2]
数组的遍历
通过for-in循环遍历数组中的数据项:
【方式一】
let array = ["Danny", "Johnnie", "Mike"]
//遍历数组数据项
for item in array {
print(item)
}
控制台打印:
Danny
Johnnie
Mike
【方式二】
let array = ["Danny", "Johnnie", "Mike"]
//遍历数组数据项
for (idx, value) in array.enumerate() {
print("idx:\(idx) value:\(value)")
}
控制台打印:
idx:0 value:Danny
idx:1 value:Johnnie
idx:2 value:Mike
字典(Dictionaries)
创建字典字面量
OC里面,字典字面量的格式是:@{@"key" : @"value"},而Swift里面,字典字面量以及数组字面量均使用中括号[]包住。格式为:[key 1: value 1, key 2: value 2, key 3: value 3]
//创建一个
var airports: [String:String] = ["TYO": "Tokyo", "DUB": "Dublin"]
//创建一个键为String,值为Int的空字典
var dic1 = Dictionary<String, Int>()
字典的增删改查
增(插入数据)
在字典中使用下标语法来添加新的数据项。可以使用一个合适类型的 key 作为下标索引,并且分配新的合适类型的值:airports["LHR"] = "London"删(删除数据)
通过
removeValueForKey()方法在字典中移除键值对。这个方法在键值对存在的情况下会移除该键值对并且返回被移除的value或者在没有值的情况下返回nil://通过键值“DUB”移除对应的值
let removedValue = airports.removeValueForKey("DUB")改(更新数据)
通过使用下标语法来改变特定键对应的值://使用下标语法来改变特定键对应的值
airports["LHR"] = "London Heathrow"也可以通过
updateValue(forKey:)方法设置或者更新特定键对应的值。这个方法还会返回更新值之前的原值或者nil,方便我们检查更新是否成功://通过“DUB”键将旧值更新为“Dublin Internation”
let oldValue = airports.updateValue("Dublin Internation", forKey: "DUB")查(访问数据)
使用下标语法来在字典中检索特定键对应的值。由于使用一个没有值的键这种情况是有可能发生的,可选类型返回这个键存在的相关值,否则就返回nil:if let airportName = airports["DUB"] {
print("DUB键对应的值为: \(airportName).")
} else {
print("DUB键没有对应的值")
}控制台打印:
DUB键对应的值为: Dublin Internation.字典的遍历
【方式一】
通过for-in循环遍历某个字典中的键值对。每一个字典中的数据项都由(key, value)元组形式返回,并且我们可以使用临时常量或者变量来分解这些元组:
//遍历字典对应的键值对
for (key, value) in airports {
print("\(key): \(value)")
}
控制台打印:
TYO: Tokyo
LHR: London Heathrow
【方式二】
我们也可以通过访问它的keys或者values属性检索一个字典所有的键、值:
//遍历字典所有键
for key in airports.keys {
print("该字典的键:\(key)")
}
//遍历字典所有值
for value in airports.values {
print("该字典的值:\(value)")
}
控制台打印:
该字典的键:LHR
该字典的键:TYO
该字典的值:London Heathrow
该字典的值:Tokyo
Note:
当你想要将字典的键、值分别存起来的话,可以使用数组的APIArray()进行存储
//将字典的所有键存进keys数组中
let keys = Array(airports.keys)
//将字典的所有值存进values数组中
let values = Array(airports.values)
Swift入坑系列—集合类型的更多相关文章
- 3-STM32带你入坑系列(自己封装点亮一个灯的库--Keil)
2-STM32带你入坑系列(点亮一个灯--Keil) 首先建一个stm32f103x.h的文件,然后 #include "stm32f103x.h" 还记得上一节 现在呢就是做一个 ...
- 入坑第二式 golang入坑系列
史前必读: 这是入坑系列的第二式,如果错过了第一式,可以去gitbook( https://andy-zhangtao.gitbooks.io/golang/content/ )点个回放,看个重播.因 ...
- gulp入坑系列(2)——初试JS代码合并与压缩
在上一篇里成功安装了gulp到项目中,现在来测试一下gulp的合并与压缩功能 gulp入坑系列(1)--安装gulp(传送门):http://www.cnblogs.com/YuuyaRin/p/61 ...
- 2-STM32带你入坑系列(点亮一个灯--Keil)
1-STM32带你入坑系列(STM32介绍) 首先是安装软件 这一节用Kei来实现,需要安装MDK4.7这个软件,怎么安装,自己百度哈.都学习32的人了,不会连个软件都不会安装吧....还是那句话 没 ...
- 1-STM32带你入坑系列(STM32介绍)
由于自己的物联网开发板上的单片机是用的STM32,但是有些朋友没有用过,所以我将用这块开发板,带着大家入门STM32 先介绍一下STM32,我是在大三下学期的时候开始接触STM32,当时是想做一个小车 ...
- Docker入坑系列(二)
Docker入坑系列(二) 上一篇我们为Docker创造了一个良好的生活环境,这一篇我们就开始让Docker活起来. 安装Docker ok,原文地址在这里. 当然,我只是自己翻译了一下而已- -跟着 ...
- Docker入坑系列(一)
Docker入坑系列(一) 引用嘛,当然是来引用别人说的东西啦. Docker 是一个开源项目,诞生于 2013 年初,它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linux ...
- 【Swift学习】Swift编程之旅---集合类型之数组(六)
swift提供了3种主要的集合类型,array,set,dictionary.本节介绍array. 数组是存储有序的相同类型的集合,相同的值可以多次出现在不同的位置. 注意: swift的Array类 ...
- The Swift Programming Language-官方教程精译Swift(5)集合类型 -- Collection Types
Swift语言提供经典的数组和字典两种集合类型来存储集合数据.数组用来按顺序存储相同类型的数据.字典虽然无序存储相同类型数据值但是需要由独有的标识符引用和寻址(就是键值对). Swift语言里的数 ...
随机推荐
- Android中级第九讲--相机调焦
博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved ! 相机调焦:原理,使用竖直seekbar,根据用户拖拉来获得距离 ...
- ArcGIS Engine中空间参照(地理坐标)相关方法总结
转自原文 ArcGIS Engine中空间参照(地理坐标)相关方法总结 1.创建空间参考 /// <summary> /// 根据prj文件创建空间参考 /// </summary& ...
- BZOJ 1696 [Usaco2007 Feb]Building A New Barn新牛舍 数学
题意:链接 方法:数学+模拟 解析: 首先这类问题不是第一次见了,所以直接知道拿x的中位数.y的中位数. 这题就是讨论情况很的烦. 题中有个限制,给出待求和的点不能选取. 所以假设奇数个点,求出x中位 ...
- python路径找类并获取静态字段
Python通过路径找类并获取其中大写的静态字段 settings.py class Foo: DEBUG = True TEST = True xx.py import importlib path ...
- Unity5中的粒子缩放(附测试源码)
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/49363241 作者:car ...
- ListCtrl添加右键菜单(ListCtrl类里编辑,给ListCtrl 发送NM_RCLICK消息)
在开发中会用到右键菜单,我们来一起学习一下. 假如,我们现在已经准备好了列表,就差右键处理了. 1.在资源视图中的添加一个MENU,如图 2.给要添加右键菜单的ListCtrl子类,添加消息 按 ct ...
- android对话框(Dialog)的使用方法
Activities提供了一种方便管理的创建.保存.回复的对话框机制.比如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog( ...
- PHP用socket连接SMTP服务器发送邮件
PHP用socket连接SMTP服务器发送邮件 PHP用socket连接SMTP服务器发送邮件学习实验记录: 分析与SMTP会话的一般流程 1. HELO XXX \r\n //XXX就是自己起个名字 ...
- [Angular] HttpParams
It is possible to use HttpParams to set http params. For example we have this url to make: https://a ...
- httpclient 模拟浏览器动作需注意的cookie和HTTP头等信息
转自:http://resolute.javaeye.com/blog/491701 commons-httpclient是apache下的一个开源项目,提供了一个纯java实现的http客户端.使用 ...