swift Dictionary

字典是一种存储多个相同类型的值的容器。每个值(value)都关联唯一的键(key),键作为字典中的这个值数据的标识符。字典中的数据项并没有具体顺序,我们在需要通过标识符(键)访问数据的时候使用字典。

创建一个空字典

var namesOfIntegers = [Int: String]() // namesOfIntegers 是一个空的 [Int: String] 字典

访问和修改字典

和数组一样,我们可以通过字典的只读属性 来获取某个字典的数据项数量:

var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"] print("The dictionary of airports contains \(airports.count) items.") // 打印 "The dictionary of airports contains 2 items."(这个字典有两个数据项)

使用布尔属性isEmpty来快捷地检查字典的count属性是否等于0:

if airports.isEmpty { print("The airports dictionary is empty.") } else { print("The airports dictionary is not empty.") } // 打印 "The airports dictionary is not empty."

我们也可以在字典中使用下标语法来添加新的数据项

airports["LHR"] ="London"  // airports 字典现在有三个数据项

我们也可以使用下标语法来改变特定键对应的值:

airports["LHR"] = "London Heathrow"  // "LHR"对应的值 被改为 "London Heathrow

我们还可以使用下标语法来通过给某个键的对应值赋值为nil来从字典里移除一个键值对:

airports["LHR"] = nil  // LHR 现在被移除了

此外,removeValueForKey(_:)方法也可以用来在字典中移除键值对

字典遍历

我们可以使用for-in循环来遍历某个字典中的键值对。每一个字典中的数据项都以(key, value)元组形式返回,并且我们可以使用临时常量或者变量来分解这些元组:

for (airportCode, airportName) in airports { print("\(airportCode): \(airportName)") } // YYZ: Toronto Pearson // LHR: London Heathrow

通过访问 或者 属性,我们也可以遍历字典的键或者值:

for airportCode in airports.keys { print("Airport code: \(airportCode)") } // Airport code: YYZ // Airport code: LHR for airportName in airports.values { print("Airport name: \(airportName)") } // Airport name: Toronto Pearson // Airport name: London Heathrow

如果我们只是需要使用某个字典的键集合或者值集合来作为某个接受 实例的 API 的参数,可以直接使用k或者 属性构造一个新数组:

let airportCodes = [String](airports.keys) // airportCodes 是 ["YYZ", "LHR"] let airportNames = [String](airports.values) // airportNames 是 ["Toronto Pearson", "London Heathrow"]

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java == 与 equals

    ==的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象(基本数据类型==比较的是值,引用数据类型==比较的是内存地址)。

    赵哥窟
  • 如何给github 打tag

    AlexdeMacBook-Air:DDAlertView alex$ git tag v1.0.1 AlexdeMacBook-Air:DDAlertVie...

    赵哥窟
  • Java Map转对象

    今天遇到一个问题,前端一条数据大概有100多个字段,前端要求按照传参数返回,传了10个就只能返回10个字段的值,所以用对象就不太合适,会返回一些无用字段,所以只...

    赵哥窟
  • 微信公众号开发之模板消息

    其实这个问题很简单,在【微信公众平台】现在已经可以直接查看自己的公众号都能使用那些接口。

    Javen
  • 原来这就是Java代码生成器的原理啊,太简单了

    前几天写了篇关于代码生成器的文章(可查看历史文章),不少同学私下问我这个代码生成器是如何运作的,为什么要用到一些模板引擎,所以今天来说明下代码生成器的流程。

    码农小胖哥
  • 裸眼 3D 是什么效果?

    ? 作者:沙因,腾讯 IEG 前端开发工程师 介绍一种裸眼 3D 的实现方式,代码以 web 端为例。 平常我们都是戴着 3D 眼镜才能感受 3D 效果,那裸...

    腾讯技术工程官方号
  • WebRequest请求错误(服务器提交了协议冲突. Section=ResponseHeader Detail=CR 后面必须是 LF)

    WebRequest请求错误(服务器提交了协议冲突. Section=ResponseHeader Detail=CR 后面必须是 LF)解决办法,天津conf...

    冰封一夏
  • Git版本回退、跳转与数据恢复

    HTML5学堂-利利:上周,为大家介绍一款“分布式版本控制系统”——Git。除了介绍“分布式”的概念、对比SVN与Git之外,我们讲解了基本的Git初始化与提交...

    HTML5学堂
  • Git学习总结1

    Git是目前世界上最先进的分布式版本控制系统(没有之一) Git有什么特点?简单来说就是:高端大气上档次!

    曼路
  • Spring Security 在 Spring Boot 中使用 OAuth2【分布式】

      OAuth(开放授权,Open Authorization)是一个开放标准,为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是...

    Demo_Null

扫码关注云+社区

领取腾讯云代金券