swift 遍历字典数组字典怎么按顺序遍历

Swift入门(十二)——利用Extension增添逆序输出字符串方法 - Swift当前位置:& &&&Swift入门(十二)——利用Extension增添逆序输出字Swift入门(十二)——利用Extension增添逆序输出字符串方法&&网友分享于:&&浏览:0次Swift入门(十二)——利用Extension添加逆序输出字符串方法Swift好像没有自带逆序输出字符串的方法,于是决定通过拓展(Extension)给String类添加一个逆序输出字符串的reverse方法。
首先新建一个Swift文件,命名规则不太清楚,于是暂且模仿OC叫做String+Operation吧,然后实现我们需要拓展的方法。下面先贴上代码,然后解释一下这段代码。
import Foundation
extension String{
func Reverse() -& String{
var returnString: String = ""
for (var i = count(self) - 1; i &= 0; --i) {
returnString.append(self[advance(self.startIndex, i)])
return returnString
由于Swift中的String,是可拓展字母集的集合,所以苹果不建议我们直接通过整数下标对其进行操作,因为这可能会往原本要构成一个完整单词的若个Unicode标量中插入数据。
Different characters can require different amounts of memory to store, so in order to determine which Character is at a particular position, you must iterate over each Unicode scalar from the start or end of that String. For this reason, Swift strings cannot be indexed by integer values.
所以想要遍历String,可以用String的index来处理。首先看一下源码:
struct Index : BidirectionalIndexType, Comparable, Reflectable {
func successor() -& String.Index
func predecessor() -& String.Index
func getMirror() -& MirrorType
subscript (i: String.Index) -& Character { get }
可以发现,String定义了附属脚本,传入的参数是一个String.Index类型的变量,而这个Index是在swift中定义了的结构体,有successor和predecessor等方法。
而advance方法第一个参数表示其实index,第二个参数的偏移量。通过
self[advance(self.startIndex, i)]
这句代码其实就变相的利用下标来遍历字符串了,取出的Character类型的元素,这时候只要调用append方法即可。
拓展(Extension)的使用也很简单:
var s: String = "hello world"
println(s.Reverse())
如果完全使用index而不涉及下标也是可以的,比如下面这段代码可以顺序遍历String:
for (var index = self.startI index != self.endI index = index.successor())
但是这种方式不适合逆向遍历字符串,因为可以看到self[self.startIndex]读取的是字符串的第一个character,但不能使用self[self.endIndex],否则会出越界错误。因此如果用这种方式尝试逆序遍历字符串,会比较麻烦。还是推荐使用第一种。
查看完整专栏——《Swift轻松入门》
【Swift入门(一)——基本语法】
【Swift入门(二)——字符与字符串】
【Swift入门(三)——元组(Tuple)】
【Swift入门(四)——可选类型(Optionals)与断言(Assert)】
【Swift入门(五)——数组(Array)】
【Swift入门(六)——字典(Dictionary)】
【Swift入门(七)——结构体(Struct)】
【Swift入门(八)——功能强大的求余运算符】
【Swift入门(九)——String与Int、Double、Float等数字相互转换】
【Swift入门(十)——循环引用、弱引用和无主引用】
【Swift入门(十一)——类型转换与is、as操作】
【Swift入门(十二)——利用Extension添加逆序输出字符串方法】
版权声明:本文为博主原创文章,未经博主允许不得转载。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 1234567891011 Copyright & &&版权所有Swift学习笔记四:数组和字典 - 推酷
Swift学习笔记四:数组和字典
& Swift 提供两种集合类型来存储集合,数组和字典。数组是一个同类型的序列化列表集合。字典是一个能够使用类似于键的唯一标识符来获取值的非序列化集合。也就是说数组是有序的,字典是无序的。
& & &和Objective-c中的NSArray不一样。swift的数组不仅可以包含对象,也可以包含非对象
& & &1) 对于单一确定类型的数组初始化
& & & & & & & &
& & & & &&
[]表示字符串数组类型
& & & & & 由于swift支持隐式表达,所以也可以直接不定义类型
& & & & & & & & & &
& & &2) swift中数组可以存储多种不同类型的值。对于多种类型的数组可以这样显示初始化
& & & & & let
& & & & & &或者隐式初始化 & & &&
& & & & & & & & & & & & &
注意:同一个数组,最好只存一种类型的值,这样方便存取,也不容易出bug。定义数组的时候最好使用显示定义。显示定义时,如果书写错误,编译器可以直接报错
3)初始化空数组
& & & & & & & &
&注意:未初始化的数组是不能使用的
Swift数组类型也提供初始化方法来创建确定长度和提供默认数值的数组。你可以通过这个初始化方法增加一个新的数组,元素的数量成为count,合适的默认值为repeatedValue
var threeDoubles = Double[](count: 3, repeatedValue: 0.0)& // threeDoubles 的类型为 Double[], 以及等于 [0.0, 0.0, 0.0]
5) 你也可以用array初始化数组
, repeatedValue:
& & &但不能忽略count和repeatedValue
6) 你也可以使用+来创建数组
& & & & &&
2. 读取和修改数组
通过只读属性count来读取数组的长度
& & & & &&
通过一个返回布尔类型的isEmpty属性检查数组的长度是否为0
& & & & &&
在数组末尾增加一个元素可以通过append方法
& & & & & 注意:let定义的数组属于常量数组,无法增加元素,只有var定义的变量数组才能使用append增加元素
& & & & &&
& & & & & & &
这时候a=[1,2,3,1]
可以用(+=)操作符来把一个元素添加到数组末尾。同理,只有var定义的变量数组才能添加元素
& & & & &&
注意:不能使用
也可以用(+=)操作符来把一个数组添加到另一个数组的末尾
& & & & &&
& & &6) 可以通过下标语法来取数组的值或者修改数组的值
& & & & &&
& & & & & &&
注意:let定义的数组不能改变长度,却可以改变里面的值
& & & & & 也可以通过下标语法改变一系列的值
& & & & & & & &
& & & & & & &
但是这种方法对let类型的数组不适用
& & & & &&
& & & & & & &
注意:你不能使用下标语法在数组中添加一个元素。
& & & & &&
这样写编译时不会出错,但是运行时会出bug
在一个特定的索引位置插入一个值,可以使用insert(atIndex:)方法
& & & & &&
你可以调用removeAtIndex方法移除特定的元素。这个方法移除特定索引位置的元素,并返回这个被移除的元素(尽管你并不关心这个返回值)。
& & & & &&
9) 可以使用
removeLast移除数组最后一个元素
& & & & &&
3. 遍历数组
可以使用for-in循环来遍历数组中的值
& & & & &&
如果需要每一个元素的整形的索引值,使用enumerate函数代替会更方便,enumerate函数对于每一个元素都会返回一个包含元素的索引和值的元组(tuple)。你可以在遍历部分分解元祖并储存在临时变量或者常量中。
& & & & &&
swift中的字典和Objective-C中字典不一样,它的key和value可以是任何类型的值
1. 创建字典
2. 读取和修改字典
使用只读的count属性来检查字典(Dictionary)包含多少个元素。
& & & & &&
可以使用下标语法给一个字典添加一个元素。使用合适类型作为新的键,并分配给它一个合适的值
& & & & & & && & &
& & & & & & &
同样 let类型的字典不能添加值
& & & & & & & &
3. 你也可以使用下表语法改变值
& & & & &&
& & & & & & &&
& & & & & & & &
let类型的字典也不能改变值
& & & & &&
使用字典的updateValue(forKey:) 方法去设置或者更新一个特定键的值 . 和上面的下标例子一样, updateValue(forKey:) 方法如果键不存在则会设置它的值,如果键存在则会更新它的值, 和下标不一样是, updateValue(forKey:) 方法 如果更新时,会返回原来旧的值rThis enables you to 可以使用这个来判断是否发生了更新。
updateValue(forKey:) 方法返回一个和字典的值相同类型的可选值. 例如,如果字典的值的类型时String,则会返回String? 或者叫“可选String“,这个可选值包含一个如果值发生更新的旧值和如果值不存在的nil值。&&&&&&&&& if let oldValue = airports.updateValue(&Dublin International&, forKey: &DUB&) {& println(&The old value for DUB was \(oldValue).&)& }& // prints &The old value for DUB was Dublin.&
你也可以使用下标语法通过特定的键去读取一个值。如果字典中的键包含对应的值,这字典下标语法会返回这个键所对应的值,否则返回nil
移除一个元素
& & & & & & & &
你可以使用下标语法把他的值分配为nil,来移除这个键值对。
& & & & & & & &2)也可以使用removeValueForKey方法,这个方法如果存在键所对应的值,则移除一个键值对,并返回被移除的值,否则返回nil。
3. 遍历字典
Swift中的字典类型是非序列化集合,也就是无序的
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致Swift For循环
Swift For循环
Windows10用户联盟QQ群:
for循环用来按照指定的次数多次执行一系列语句。Swift 提供两种for循环形式:
for-in用来遍历一个区间(range),序列(sequence),集合(collection),系列(progression)里面所有的元素执行一系列语句。
for条件递增(for-condition-increment)语句,用来重复执行一系列语句直到达成特定条件达成,一般通过在每次循环完成后增加计数器的值来实现。
你可以使用for-in循环来遍历一个集合里面的所有元素,例如由数字表示的区间、数组中的元素、字符串中的字符。
下面的例子用来输出乘 5 乘法表前面一部分内容:
for index in 1...5 {
println(&\(index) times 5 is \(index * 5)&)
// 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25
例子中用来进行遍历的元素是一组使用闭区间操作符(...)表示的从1到5的数字。index被赋值为闭区间中的第一个数字(1),然后循环中的语句被执行一次。在本例中,这个循环只包含一个语句,用来输出当前index值所对应的乘 5 乘法表结果。该语句执行后,index的值被更新为闭区间中的第二个数字(2),之后println方法会再执行一次。整个过程会进行到闭区间结尾为止。
上面的例子中,index是一个每次循环遍历开始时被自动赋值的常量。这种情况下,index在使用前不需要声明,只需要将它包含在循环的声明中,就可以对其进行隐式声明,而无需使用let关键字声明。
index常量只存在于循环的生命周期里。如果你想在循环完成后访问index的值,又或者想让index成为一个变量而不是常量,你必须在循环之前自己进行声明。
如果你不需要知道区间内每一项的值,你可以使用下划线(_)替代变量名来忽略对值的访问:
let base = 3
let power = 10
var answer = 1
for _ in 1...power {
answer *= base
println(&\(base) to the power of \(power) is \(answer)&)
// 输出 &3 to the power of 10 is 59049&
这个例子计算 base 这个数的 power 次幂(本例中,是3的10次幂),从1(3的0次幂)开始做3的乘法, 进行10次,使用1到10的闭区间循环。这个计算并不需要知道每一次循环中计数器具体的值,只需要执行了正确的循环次数即可。下划线符号_(替代循环中的变量)能够忽略具体的值,并且不提供循环遍历时对值的访问。
使用for-in遍历一个数组所有元素:
let names = [&Anna&, &Alex&, &Brian&, &Jack&]
for name in names {
println(&Hello, \(name)!&)
// Hello, Anna!
// Hello, Alex!
// Hello, Brian!
// Hello, Jack!
你也可以通过遍历一个字典来访问它的键值对(key-value pairs)。遍历字典时,字典的每项元素会以(key, value)元组的形式返回,你可以在for-in循环中使用显式的常量名称来解读(key, value)元组。下面的例子中,字典的键(key)解读为常量animalName,字典的值会被解读为常量legCount:
let numberOfLegs = [&spider&: 8, &ant&: 6, &cat&: 4]
for (animalName, legCount) in numberOfLegs {
println(&\(animalName)s have \(legCount) legs&)
// spiders have 8 legs
// ants have 6 legs
// cats have 4 legs
字典元素的遍历顺序和插入顺序可能不同,字典的内容在内部是无序的,所以遍历元素时不能保证顺序。关于数组和字典,详情参见。
除了数组和字典,你也可以使用for-in循环来遍历字符串中的字符(Character):
for character in &Hello& {
println(character)
For条件递增(for-condition-increment)
除了for-in循环,Swift 提供使用条件判断和递增方法的标准 C 样式for循环:
for var index = 0; index & 3; ++index {
println(&index is \(index)&)
// index is 0
// index is 1
// index is 2
下面是一般情况下这种循环方式的格式:
for&initialization;&condition;&increment&{
statements
和 C 语言中一样,分号将循环的定义分为 3 个部分,不同的是,Swift 不需要使用圆括号将& increment&包括起来。
这个循环执行流程如下:
循环首次启动时,初始化表达式(initialization expression)被调用一次,用来初始化循环所需的所有常量和变量。
条件表达式(condition expression)被调用,如果表达式调用结果为false,循环结束,继续执行for循环关闭大括号 (})之后的代码。如果表达式调用结果为true,则会执行大括号内部的代码(statements)。
执行所有语句(statements)之后,执行递增表达式(increment expression)。通常会增加或减少计数器的值,或者根据语句(statements)输出来修改某一个初始化的变量。当递增表达式运行完成后,重复执行第 2 步,条件表达式会再次执行。
上述描述和循环格式等同于:
initialization
while&condition&{
statements
在初始化表达式中声明的常量和变量(比如var index = 0)只在for循环的生命周期里有效。如果想在循环结束后访问index的值,你必须要在循环生命周期开始前声明index。
var index: Int
for index = 0; index & 3; ++index {
println(&index is \(index)&)
// index is 0
// index is 1
// index is 2
println(&The loop statements were executed \(index) times&)
// 输出 &The loop statements were executed 3 times
注意index在循环结束后最终的值是3而不是2。最后一次调用递增表达式++index会将index设置为3,从而导致index & 3条件为false,并终止循环。
标签:&&&&&&&&

我要回帖

更多关于 python 字典遍历顺序 的文章

 

随机推荐