Swift--数组和字典(二)

字典是一个容器,它存储多个相同类型的值。每个值都与一个唯一的密钥,它作为一个标识符字典内的值相关联。不像在一个数组项,在字典中的项目没有一个指定的顺序。您可以使用一本字典,当你需要查找基于其标识符值,在大致相同的方式,一个真实世界的字典来查找定义为一个特定的词。

Swift的字典不同于Objective-C的NSDictionary中和的NSMutableDictionary类,它可以使用任何类型的对象作为其键和值,不提供有关这些对象的性质的任何信息。Swift,钥匙和一个特定的字典可存储的值类型总是明确,无论是通过显式类型批注或通过类型推断。

Swift的字典类型写为Dictionary<KeyType,ValueType>,其中KeyType的是价值,可以用来作为字典的键的类型和值类型是值类型的字典中存储这些密钥。

唯一的限制是,关键字类型必须是可哈希的,也就是说,它必须提供一种方式,使自己唯一表示的。所有的斯威夫特的基本类型(如字符串,整数,双精度和布尔)是哈希默认情况下,所有这些类型都可以作为字典的键。无关联的值枚举成员的值(如枚举描述)也可哈希的默认。

您可以初始化字典与字典的文本,这也有类似的语法文字前面见过的数组。字典文字是一种简写方式来写一个或多个键 - 值对的字典集合。

一键 - 值对的键和值的组合。在字典中的文字,在每个键 - 值对的键和值用冒号隔开。键 - 值对被写为一个列表,以逗号分隔,由一对方括号括:

[key1:value1, key2: value2, key3: value3]

下面的示例创建一个字典来存储国际机场的名字。在字典中,键是三个字母的国际航空运输协会代码和值是机场名称:

var airports:
Dictionary<String,
String>= ["TYO":
"Tokyo","DUB":
"Dublin"]

airports字典包含两个键 - 值对初始化。第一对具有“TYO”的键和“Tokyo”的值。第二对具有“DUB”的键和“Dublin”的值。

这本词典的文字包含两个字符串:字符串对。这符合airports变量声明的类型(只有String键,只有字符串值的字典)等的字典文字的赋值是允许的,以此来初始化airports字典,两个初始项目。

正如数组,你不必写字典的类型,如果你初始化它与一个字典文字,其键和值具有一致的类型。机场的初始化可能已被写入一个较短的形式,而不是在:

var airports
= ["TYO": "Tokyo",
"DUB":"Dublin"]

因为在字面的所有键都是同一类型,同样所有的值都是相同类型的对方,Swift可以推断词典<String, String>,字符串是正确的类型要用于airports字典。

访问和修改字典

可以访问和修改一个字典,通过它的方法和属性,或使用下标语法。正如一个数组,你可以找出项目在字典的count属性计数来检查个数:

println("The dictionary ofairports contains
\(airports.count)
items.")

// prints "The dictionary of airports contains 2 items."

您可以添加一个新的项目到与标语法字典。使用适当类型的新键作为下标索引,并指定相应类型的新值:

airports["LHR"] =
"London"?

// theairports dictionary now contains 3 items

你也可以改变”LHR”的值

airports["LHR"] =
"London Heathrow"?

// the value for "LHR" has been changed to "LondonHeathrow"

使用字典的updateValue(forKey:)方法来设置或更新一个特定的键的值。像上面的例子标,该updateValue(forKey:)方法设置一个值,如果不存在一个键,或更新,如果该键已经存在的价值。不像一个下标,但是,updateValue(forKey:)方法执行更新后返回旧值。这使您可以检查是否没有更新发生。

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:

if let airportName
= airports["DUB"]{?

println("The name of the airport is
\(airportName).")?

}else{?

println("That airport is not in the airportsdictionary.")

}?

//prints "The name of the airport is Dublin International."

您可以使用下标语法来通过该键的分配为零的值从字典中删除一个键 - 值对:

airports["APL"] =
"Apple International"?

// "Apple International" is not the real airport for APL, sodelete it

airports["APL"] =
nil

// APLhas now been removed from the dictionary

另外,从与removeValueForKey法词库中删除一个键 -
值对。此方法删除的键值对,如果它存在,并返回被删除的值,或者返回nil,如果存在没有价值:

if let removedValue
= airports.removeValueForKey("DUB") {

println("The removed airport‘sname is
\(removedValue).")

}else{

prints "The removed airport‘s name is Dublin International."

}?

//prints "The removed airport‘s name is Dublin International."

遍历一个字典

我们可以使用for-in来遍历一个字典

for (airportCode,
airportName)in
airports {

println("\(airportCode):
\(airportName)")

}

.      // TYO:Tokyo

.      // LHR:London Heathrow

也可以通过访问其键和值检索的字典的键或值的可重复的集合特性:

for
airportCode in
airports.keys
{

println("Airport code:
\(airportCode)")

}

.     // Airport code: TYO

.     // Airport code: LHR

for
airportName in
airports.values
{

println("Airport name:
\(airportName)")

}

?// Airport name: Tokyo

//Airport name: London Heathrow

如果需要使用字典的键或值与一个API,它需要一个Array实例,初始化一个新的数组中的键或值属性:

.    let airportCodes
= Array(airports.keys)

.      //airportCodes is ["TYO", "LHR"]

.      let
airportNames =
Array(airports.values)

.      //airportNames is ["Tokyo", "London Heathrow"]

初始化一个字典

.    var namesOfIntegers
= Dictionary<Int,
String>()

.     // namesOfIntegers is an emptyDictionary<Int, String>

Swift--数组和字典(二)

时间: 2024-10-04 20:02:12

Swift--数组和字典(二)的相关文章

Swift 数组和字典

数组: 中括号[ ] 表示,数组值之间用逗号分隔 1.如果数组声明为常量,则本身不能修改,且数组中的值也不能修改 2.指定数组的类型,语法:Array<Type> 可以简写为 [Type] var typeArray1: [String] var typeArray1: Array<Int> = [1, 2, 3] 3.如果声明了数组,但是没有初始化该数组,是不能被引用的 var typeArray1: [String] println(typeArray1)  出错!! 4.当检

Swift 数组、字典

1 import Foundation 2 3 // 数组 4 var arr = ["Hello","jinapangpang",100,2.3] 5 var arr1 = [] 6 print(arr) 7 8 // 字典 9 var dict = ["name":"jinpangpang","age":"16"] 10 // 添加新项 11 dict["sex"

swift数组与字典类型操作使用

var studentList : [String] = ["张三","李四","王五"]; //数组插入 studentList.insert("刘备",atIndex: 0) //数组追加,每次调用只能追加一个元素 studentList.append("赵云"); //数组追加多元素 studentList += ["关羽","张飞"]; //数组遍历 for

Swift 数组,字典

数组的声明 通过initailizer初始化,注意这里的[Double]仅仅是Array<Double>的缩写: 在数组中添加元素的两种方式 添加元素 移除元素 移除元素的时候,后面的元素会自动向前移动填补gap 数组遍历 除了普通的for in 循环遍历,也可以用全局的enumerate函数来获取遍历中元素的序号 字典: 三种遍历方式:

Swift 之数组与字典

http://www.cocoachina.com/swift/20151230/14802.html 说到数组和字典,只要是编过程的小伙伴并不陌生.在Swift中的数组与字典也有着一些让人眼前一亮的特性,今天的博客就来窥探一下Swift中的Array和Dictionary.还是沿袭之前的风格,在介绍Swift中的数组时,我们会对比一下ObjC中的数组和字典,因为ObjC也是iOS开发的主要语言不是.无论是简单还是复杂的程序,数组和字典的用处还是比较多的,这两者虽然是Swift的基础内容,但是也

Swift中的元组,数组,字典

元组(Tuples)与数组和字典的差别较大,元组是把多个值组成一个复合值: let http 404 Error = (404,"Not Found") //http 404 的类型是(Int,String),值是(404,"Not Found") 可以在定义元组的时候给单个元素命名,这时候元组的数组有一些相似: let http200Status = (statusCode: 200, description: "OK") 数组(Array)和

Swift - 1 (常量、变量、字符串、数组、字典、元组、循环、枚举、函数)

Swift 中导入类库使用import,不再使用<>,导入自定义不再使用"" import Foundation 1> 声明变量和常量 在Swift中使用 "let" 修饰一个常量,使用 "var" 修饰一个变量; let修饰常量的值是不可以更改的: var修饰的变量的值是可以更改的: 在声明常量和变量的时候可以使用表情符号.中文等命名常量名和变量名. Swift定义变量或者常量的时候,需要标识出变量或者常量的类型,如果不标识,

Swift学习笔记四:数组和字典

最近一个月都在专心做unity3d的斗地主游戏,从早到晚,最后总算是搞出来了,其中的心酸只有自己知道.最近才有功夫闲下来,还是学习学习之前的老本行--asp.net,现在用.net做项目流行MVC,而不是之前的三层,既然技术在更新,只能不断学习,以适应新的技术潮流! 创建MVC工程 1.打开Visual studio2012,新建MVC4工程 2.选择工程属性,创建MVC工程 3.生成工程的目录 App_Start:启动文件的配置信息,包括很重要的RouteConfig路由注册信息 Conten

swift中数组和字典得使用,及循环得使用方法(xcode6版本上所写代码)

// // main.swift // 数组 // // Created by Mac on 15-9-9. // Copyright (c) 2015年 青苹果. All rights reserved. // import Foundation //不可变数组,用let定义即可 var array:[String] = ["ss","set","jim"] println("\(array)") var array1:[F

Swift学习笔记数组与字典

swift中数组和字典都是以结构体的形式实现的. 首先,这个很奇葩,我不知道为什么这样设计,这样是出于一个什么样的考虑. 在C#中使用字典: Dictionary<int, string> dic = new Dictionary<int, string>(); Dictionary<int, string> dic1 = dic; dic.Add(1,"123"); dic1[1]="456"; Console.WriteLin