[Swift]遍历集合类型(数组、集合和字典)

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/ )
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/9798475.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

Swift提供了三种主要的集合类型,称为数组,集合和字典,用于存储值集合。

数组是有序的值集合。

集是唯一值的无序集合。

字典是键值关联的无序集合。

../_images/CollectionTypes_intro_2x.png

Swift中无法再使用传统形式的for循环。

1 //传统for循环形式不适用于Swift
2 for(单次表达式;条件表达式;末尾循环体){中间循环体;}

遍历数组:可以使用forin循环遍历数组中的值。

 1 let arrayStr:[String] = ["s","t","r","e","n","g","t","h","e","n","!"]
 2 
 3 //方法1:根据元素顺序遍历
 4 for item in arrayStr {
 5     print(item)
 6 }
 7 
 8 //方法2:根据部分元素顺序遍历
 9 for item in arrayStr[1...5] {
10     print(item)
11 }
12 
13 //方法3:根据索引顺序遍历
14 for index in 0...(arrayStr.count - 1) {
15     print(arrayStr[index])
16 }
17 
18 //方法4:初始化数组并顺序遍历
19 for item in Array(1...10) {
20     print(item)
21 }
22 
23 //方法5:stride函数
24 //from,to,by 最后一个值是 >(或<) to的值
25 //from,through,by 最后一个值是 >=(或<=) through的值
26 for index in stride(from: 0, to: arrayStr.count,by: 1 )
27 {
28     print(arrayStr[index])
29 }

如果不需要序列中的每个值,则可以使用下划线(_)代替变量名来忽略这些值。

1 let base = 3
2 let power = 10
3 var answer = 1
4 for _ in 1...power {
5     answer *= base
6 }
7 print("\(base) to the power of \(power) is \(answer)")
8 // Prints "3 to the power of 10 is 59049"

遍历集合:可以使用forin循环遍历集合中的值。

1  let arrayStr:Set<String> = ["s","t","r","e","n","g"]
2 //输出的顺序是随机的
3 for item in arrayStr {
4     print("\(item)")
5 }

Swift的Set类型没有定义的顺序。要以特定顺序迭代集合的值,请使用该sorted()方法,该方法将集合的元素作为使用<运算符排序的数组返回。

1  let arrayStr:Set<String> = ["s","t","r","e","n","g"]
2 //按照字母排序顺序输出
3 for item in arrayStr.sorted() {
4     print("\(item)")
5 }

遍历字典(可单独遍历键、值、或键值)

可以用字典遍历键值对forin环。字典中的每个项都作为元组返回,您可以将元组的成员分解为临时常量或变量,作为迭代的一部分:(key, value),还可以通过访问字典的键keysvalues属性来检索字典的键或值的可迭代集合:

 1 var direc: [Int: String] =  [0:"s",1:"t",2:"r",3:"e",4:"n",5:"g"]
 2 
 3 //按键值对遍历顺序遍历
 4 for (num, char) in direc.sorted(by: <) {
 5     print("\(num): \(char)")
 6 }
 7 
 8 //按键遍历顺序遍历
 9 for num in direc.keys.sorted(by: <) {
10     print("\(num)")
11 }
12 
13 //按值遍历顺序遍历
14 for char in direc.values {
15     print("\(char)")
16 }

如果您需要使用带有Array实例的API的字典键或值,请使用keysvalues属性初始化新数组:

1 let nums = [Int](direc.keys)
2 print(nums)
3 //次序随机 [4, 5, 2, 0, 1, 3]
4 
5 let chars = [String](direc.values)
6 print(chars)
7 //次序随机 ["n", "g", "r", "s", "t", "e"]

Swift的Dictionary类型没有定义的顺序。要按特定顺序迭代字典的键或值,请sorted()在其keysvalues属性上使用该方法。

倒序遍历 :reversed() 或 stride函数

Swift中标准库中方法

1 //可以用来快速的枚举数组中的内容,并用元组(index, value)接收
2 public func enumerated() -> EnumeratedSequence<Array<Element>>
3 
4 //可以倒叙数组内容
5 public func reversed() -> ReversedRandomAccessCollection<Array<Element>>

当两者结合使用用到索引时需要注意

 1 let arrayStr:[String] = ["s","t","r","e","n","g","t","h","e","n","!"]
 2 
 3 //索引元素值绑定一起倒序遍历
 4 for i in arrayStr.enumerated().reversed() {
 5   print("\(i) ", terminator: "")
 6 }
 7 /*
 8 (offset: 10, element: "!") (offset: 9, element: "n") (offset: 8, element: "e") (offset: 7, element: "h") (offset: 6, element: "t") (offset: 5, element: "g") (offset: 4, element: "n") (offset: 3, element: "e") (offset: 2, element: "r") (offset: 1, element: "t") (offset: 0, element: "s") 
 9 */
10 
11 //只元素值倒序遍历,原索引不变
12 for i in arrayStr.reversed().enumerated() {
13   print("\(i) ", terminator: "")
14 }
15 /*
16 (offset: 0, element: "!") (offset: 1, element: "n") (offset: 2, element: "e") (offset: 3, element: "h") (offset: 4, element: "t") (offset: 5, element: "g") (offset: 6, element: "n") (offset: 7, element: "e") (offset: 8, element: "r") (offset: 9, element: "t") (offset: 10, element: "s") 
17 */

倒序遍历数组

 1 let arrayStr:[String] = ["s","t","r","e","n","g","t","h","e","n","!"]
 2 
 3 //方法1:根据元素倒序遍历
 4 for item in arrayStr.reversed() {
 5     print(item)
 6 }
 7 
 8 //方法2:根据部分元素倒序遍历
 9 for item in arrayStr[1...5].reversed() {
10     print(item)
11 }
12 
13 //方法3:根据索引倒序遍历
14 for index in (0...(arrayStr.count - 1)).reversed() {
15     print(arrayStr[index])
16 }
17 
18 //方法4:初始化数组并倒序遍历
19 for item in Array(1...10).reversed() {
20     print(item)
21 }
22 
23 //方法4:初始化数组并倒序遍历
24 for item in Array(1...10).reversed() {
25     print(item)
26 }
27 
28 //方法5:stride函数
29 //from,to,by 最后一个值是 >(或<) to的值
30 //from,through,by 最后一个值是 >=(或<=) through的值
31 for index in stride(from: arrayStr.count - 1, through: 0,by: -1 )
32 {
33      print(arrayStr[index])
34 }

 倒序遍历集合

1 let arrayStr:Set<String> = ["s","t","r","e","n","g"]
2 //按照字母排序倒序输出
3 for item in arrayStr.sorted().reversed() {
4     print("\(item) ", terminator: "")
5 }
6 //Print "t s r n g e" 

倒序遍历字典(可单独遍历键、值、或键值)

1 var direc: [Int: String] =  [0:"s",1:"t",2:"r",3:"e",4:"n",5:"g"]
2 //按键值对倒序遍历
3 for (num, char) in direc.sorted(by: <).reversed() {
4     print("\(num): \(char)")
5 }

 

转载于:https://www.cnblogs.com/strengthen/p/9798475.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

沣东新城镐京遗址规划_沣东新城房价为啥这么高?

沣东房价为啥2万&#xff0c;为啥超越曲江浐灞&#xff0c;为啥和高新差不多&#xff1f;很多论坛 账号 抖音 喋喋不休&#xff0c;那么说说到底为啥这么贵1、从2018年开始&#xff0c;沣东新城商品房住宅用地&#xff0c;几乎容积率都在2.8以上&#xff0c;90%以上容积率在2.5…

在一台机器上运行多个ActiveMQ实例

几周前&#xff0c;我通过Mule ESB解决方案再次开始使用Apache ActiveMQ作为JMS提供程序。 由于我使用ActiveMQ已经有几年了&#xff0c;所以我认为最好检查一些&#xff08;新&#xff09;功能&#xff0c;例如故障转移传输和其他群集功能 。 为了能够测试这些最后的东西&…

P3138 [USACO16FEB]负载平衡Load Balancing_Silver

https://www.luogu.org/problemnew/show/P3138 题目描述 农民约翰的N只牛分别站在他的二维农场的不同位置&#xff08;x1,y1&#xff09;…(xn,yn)&#xff08;1<N<100000,xi和yi是正整奇数&#xff09;。他想建一排无限长度的南北方向的满足等式xa的围栏来把他的农场分成…

saas物资管理界面设计_大型物流企业都在用的SaaS系统,看大规模运配网络如何实现精细化管理?...

企业发展到一定阶段&#xff0c;货品销售网络会不断扩大&#xff0c;就必须有大型高效的物流体系作为支撑&#xff0c;就需要大规模运配网络实现订单履约&#xff0c;物流企业的更大更多的商机也因此产生。由此可见&#xff0c;拥有大规模运配网络的主体有两类&#xff1a;第一…

socket read time out解决方法_time_after方法对jiffies回绕问题的解决

前言&#xff1a; 最近在啃《 Linux内核设计与实现》&#xff0c;看到第四章CFS时候&#xff0c;读了几遍没太理清这一小节到思路&#xff0c;看到40页这么一句话&#xff1a;“如果这里所讨论的定时器节拍对你来说很陌生&#xff0c;快先去看看第十一章再说。因为这点正是引入…

ASP.NET Core Razor Pages

Razor 页面是Asp.Net Core2.0新增的一个功能。Razor 页面是 ASP.NET Core MVC 的一个新特性&#xff0c;它可以使基于页面的编码方式更简单高效。 环境&#xff1a;vs2017 .net core2.2 Razor 页面项目搭建 目录说明 wwwroot&#xff1a;放置网站的静态文件的目录。例如/wwwroo…

curd操作php代码,Laravel 5.6中的CURD操作(代码示例详解)

在本篇文章中&#xff0c;我将给大家分享laravel 5.6版本中的基本crud(创建&#xff0c;读取&#xff0c;更新和删除)应用程序模块。你可以按照下面的步骤在laravel 5.6中创建CRUD应用程序。Laravel是一个流行的开源PHP MVC框架&#xff0c;具有许多高级开发功能。如果你是lara…

为什么c++的开源库那么少?

为什么c的开源库那么少&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「 C的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xff01;&#xff01;…

实施动态代理-比较

有时需要拦截某些方法调用&#xff0c;以便每次调用被拦截方法时都执行自己的逻辑。 如果您不属于Java EE的CDI领域&#xff0c;并且不想使用诸如Aspectj之类的AOP框架&#xff0c;那么您将有一个简单而有效的替代方法。 从1.5版开始&#xff0c;JDK附带了类java.lang.reflect…

结构专业规范大全_1.2万篇 建筑行业规范大全套!速来!

应广大站友以及会员用户对建筑规范的要求&#xff0c;我们整理了近几年来国家发布的各个专业的标准、规范、图集&#xff0c;以及全国各地共32个地区的区域标准&#xff0c;总计12000余篇&#xff0c;共计80G的建筑行业规范&#xff01;BIMer自学站将会在一到两个月的之间内相继…

数据库如何进行索引优化

数据库索引 1&#xff0e;什么是索引 在数据库中&#xff0c;索引的含义与日常意义上的“索引”一词并无多大区别&#xff08;想想小时候查字典&#xff09;&#xff0c;它是用于提高数据库表数据访问速度的数据库对象。A&#xff09;索引可以避免全表扫描。多数查询可以仅扫描…

第二章总结

第二章 寄存器 1.CPU概述 一个典型的CPU由运算器、控制器、寄存器等器件组成。 内部总线实现CPU内部各个器件之间的联系。 外部总线实现CPU和主板上其它器件的联系。 2.通用寄存器 8086CPU中&#xff0c;寄存器AX, BX, CX, DX通常用于存放一般性数据&#xff0c;称为通用寄存器…

ashly理器4.8软件汉化版_AMD 处理器核心比英特尔多还更便宜?英特尔回应

IT之家 9 月 25 日消息 英特尔已在本月初发布了 11 代酷睿移动处理器&#xff0c;搭载 11 代酷睿的产品最早将在 10 月上市。现在&#xff0c;新浪科技访了英特尔公司中国零售销售集团总经理唐炯&#xff0c;就 11 代酷睿产品进行讨论。在谈到 AMD 处理器比英特尔便宜&#xff…

OutOfMemoryError:解决方案反模式

这些年来&#xff0c;我们一直密切关注以OutOfMemoryError消息的不同形式打包的问题。 通过专门的服务&#xff08;例如Google警报&#xff09;&#xff0c;每天就特定关键字的新问题进行摘要&#xff0c;使我们对应用程序因日志中的java.lang.OutOfMemoryError失败而出现的情况…

leetcood学习笔记-58-最后一个单词的长度

题目描述&#xff1a; 第一次解答&#xff1a; class Solution:def lengthOfLastWord(self, s: str) -> int:Ls.strip().split(" ")if L[-1]"" :return 0return len(L[-1]) 优化后&#xff1a; class Solution:def lengthOfLastWord(self, s: str) ->…

Plyr – 简单,灵活的 HTML5 媒体播放器

Plyr 是一个简单的 HTML5 媒体播放器&#xff0c;包含自定义的控制选项和 WebVTT 字幕。它是只支持现代浏览器&#xff0c;轻量&#xff0c;方便和可定制的媒体播放器。还有的标题和屏幕阅读器的全面支持。 在线演示 源码下载 您可能感兴趣的相关文章网站开发中很有用的 …

第一章 SpringBoot快速入门

1.1、包依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.14.RELEASE</version><relativePath/> <!-- lookup parent from repository --> …

solaris配置php,Solaris下安装Oracle_启动Oracle及监听

无论是在Linux下还是在Solaris下都安装过很多次Oracle&#xff0c;几乎都没成功过。最开始安装的时候连安装页面都见不到&#xff0c;后来&#xff0c;能够看到安无论是在Linux下还是在Solaris下都安装过很多次Oracle&#xff0c;几乎都没成功过。最开始安装的时候连安装页面都…

【C++】满二叉树问题

/* 给出一棵满二叉树的先序遍历&#xff0c;有两种节点&#xff1a;字母节点&#xff08;A-Z&#xff0c;无重复&#xff09;和空节点&#xff08;#&#xff09;。要求这个树的中序遍历。输出中序遍历时不需要输出#。 满二叉树的层数n满足1<n<5。Sample Input: ABC#D#ESa…

NativeScript - JS 构建跨平台的原生 APP

使用 NativeScript&#xff0c;你可以用现有的 JavaScript 和 CSS 技术来编写 iOS、Android 和 Windows Phone 原生移动应用程序。由原生平台的呈现引擎呈现界面而不是 WebView&#xff0c;正因为如此&#xff0c;应用程序的整个使用体验都是原生的。 NativeScript 使您可以使用…