IOS-04 Swift 中数组、集合、字典、区间、元组和可选类型

在 Swift 编程语言中,数据结构和类型的合理运用对于高效编程至关重要。接下来,我们将深入探讨数组、集合、字典、区间、元组和可选类型的相关知识。

一、数组(Array)
(一)元素定义
可以通过多种方式定义数组,例如:

var a = [1,2,3]
var b = ["a","b","c"]
var c = [true,false,false]

也可以显式指定类型:

var a1:Array<Int> = [1,3,4]
var a2:[Int] = [1,2,3]

还可以通过其他方式创建数组,如:

var b1 = Array<Int>()
var b2 = Array<Int>([1,2,3])
var b3 = Array(1...3)
var c1 = Array(repeating: "*", count: 10)

(二)元素访问
通过索引访问数组元素:

print(a[0])

访问数组的子范围:

print(b[0...2])
print(b[...2])
print(b[1...])

(三)数组遍历
以下是几种常见的遍历数组的方式:

for item in b{print(item,terminator: "-")
}for(index,value) in b.enumerated(){print(index,value,terminator: "-")
}b.forEach{ item in print(item)}

(四)元素增删
对数组进行元素的添加和删除操作:

var fruit = ["青苹果","香蕉","芒果"]
fruit.append(b[0])
fruit.append(contentsOf: ["apple","orange"])
fruit += ["西红柿"]
fruit.insert("椰子", at: 1)
fruit.insert(contentsOf: ["a","b"], at: 0)fruit.removeFirst();
fruit.removeLast();
fruit.remove(at: 0)
fruit.removeSubrange(0...1)

(五)数组的变换
对数组进行一些变换操作,例如:

fruit.map{$0.uppercased()
}

(六)数组的方法
数组具有一些实用的方法,如:

print(c1.count) //长度
print(c1.isEmpty) //判空print(fruit.first?? "") //第一个元素
print(fruit.last?? "") //最后一个元素
print(fruit.randomElement()?? "") //随机访问num.sort() //排序
//升降
num.sort(by: >)
num.sort(by: <)
fruit.shuffle() //打乱//反转
var s1 = fruit.reversed();
fruit.reverse()

二、集合(Set)
(一)集合定义

var numSet:Set<Int> = [1,2,3]
var numSet2 = Set([1,2,3,4])var stringSet = Set(["苹果","蓝莓"])

(二)集合操作
集合的插入、更新、删除等操作:

var (m,n) = stringSet.insert("香蕉")
stringSet.update(with: "橘子")
stringSet.remove("苹果")
stringSet.removeAll();

集合的运算,如并集、差集、交集等:

print(numSet.union(numSet2))
print(numSet.subtracting(numSet2))
print(numSet.intersection(numSet2))
print(numSet.symmetricDifference(numSet2))
print(numSet.isSubset(of: numSet2))
print(numSet.isSuperset(of: numSet2))

三、字典(Dictionary)
(一)字典定义

var dict:Dictionary<Int,String> = [:]
var dict2:Dictionary<Int,String> = [1:"apple",2:"orange"]
var dict3 = ["张三":"李四"]

(二)字典遍历
通过不同方式遍历字典:

for (key,value) in dict2{print(key,value)
}for (key) in dict2.keys{print(key)
}for value in dict2.values{print(value)
}dict2.forEach{print($0,$1)
}
dict2.forEach{ (key,value) inprint(key,value)
}

四、区间(Range)
区间包括半开区间和闭区间等:

var a = 1...3
var b = "a"..."z"
var c =...100.0
var d = stride(from: 0, to: 10, by: 2)

五、元组(Tuple)
元组类似于其他语言中的元组结构:

var p = (1,"张三",10,"age","man")
var p2 = (id:1,name:"张三",age:10,unit:"age",sex:"man")

六、可选类型(Optional)
可选类型用于处理可能为空的值:

 var i = Int("1")//Optional=可选类型print(type(of: i))//!代表解包 ,如果你确定存在就可以解包print(i!)var a:String?="project12"var b:Optional<Int> = 1var c:Int? = Optional.some(34)var d:Int? = Optional.noneprint(d == nil)//a为可选类型,后面会被加?print(a?.hasPrefix("project"))

七、源码

//
//  array_study.swift
//  StudySwift
//
//  Created by YuJun on 2024/7/27.
//import Foundationfunc array_study(){//元素定义var a = [1,2,3]var b = ["a","b","c"]var c = [true,false,false]print(a,b,c)var a1:Array<Int> = [1,3,4]var a2:[Int] = [1,2,3]var b1 = Array<Int>()var b2 = Array<Int>([1,2,3])var b3 = Array(1...3)var c1 = Array(repeating: "*", count: 10)print(a1,a2,b1,b2,b3,c1)//元素访问print(a[0])print(b[0...2])print(b[...2])print(b[1...])//数组的遍历for item in b{print(item,terminator: "-")}for(index,value) in b.enumerated(){print(index,value,terminator: "-")}b.forEach{ item in print(item)}//元素增删var fruit = ["青苹果","香蕉","芒果"]fruit.append(b[0])fruit.append(contentsOf: ["apple","orange"])fruit += ["西红柿"]fruit.insert("椰子", at: 1)fruit.insert(contentsOf: ["a","b"], at: 0)fruit.removeFirst();fruit.removeLast();fruit.remove(at: 0)//删除区间元素fruit.removeSubrange(0...1)var num = [1,2,3]num.insert(contentsOf: 4...6, at: 2)print(num)//替换将01替换一下fruit.replaceSubrange(0...1, with: ["c","d"])num += (4...7)print(num)if(fruit.contains("西红柿")){print("yes")}else{print("no")}//这里必须使用$,var xihongshi = fruit.first(where: {$0=="西红柿"})var xihongshi2 = fruit.first(where: {n in n=="西红柿"})var xihongshi3 = fruit.firstIndex(where: {n in n=="西红柿"})print(xihongshi ?? "")print(xihongshi2 ?? "")print(xihongshi3 ?? -1)print(num.max())print(num.min())//数组的变换fruit.map{$0.uppercased()}print(fruit)//数组的一些方法print(c1.count)print(c1.isEmpty)print(fruit.first ?? "")print(fruit.last ?? "")//输出随机print(fruit.randomElement() ?? "")num.sort()num.sort(by: >)num.sort(by: <)//打乱fruit.shuffle()//反转var s1 = fruit.reversed();fruit.reverse()let line = "a a a+a"print(line.split(separator: " "))print(line.split(whereSeparator: {c in c == "+" || c == " "}))print(fruit.joined(separator: "-"))}//Set学习func set_study(){//集合Set的定义var numSet:Set<Int> = [1,2,3]var numSet2 = Set([1,2,3,4])var stringSet = Set(["苹果","蓝莓"])var (m,n) = stringSet.insert("香蕉")//若存在m=false,不存在m=true并插入print(m,n)var (p,q) = numSet.insert(1)stringSet.update(with: "橘子")//强行插入stringSet.remove("苹果")stringSet.removeAll();//Set的加减交子集合print(numSet.union(numSet2))//加print(numSet.subtracting(numSet2))//减print(numSet.intersection(numSet2))//交print(numSet.symmetricDifference(numSet2))//差print(numSet.isSubset(of: numSet2))//子print(numSet.isSuperset(of: numSet2))//超print(numSet.randomElement() ?? -1)//超//其他函数参考数组,遍历也是
}func dict_study(){var dict:Dictionary<Int,String> = [:] //空的字典,不写就是数组了var dict2:Dictionary<Int,String> = [1:"apple",2:"orange"] //空的字典print(type(of: dict))print(dict2)var dict3 = ["张三":"李四"]print(dict3["张三",default: ""])for (key,value) in dict2{print(key,value)}for (key) in dict2.keys{print(key)}for value in dict2.values{print(value)}dict2.forEach{print($0,$1)}dict2.forEach{ (key,value) inprint(key,value)}print(<#T##items: Any...##Any#>)//获取随机元素print(dict2.randomElement())
}//区间func range_study(){var a = 1...3var b = "a"..."z"var c = ...100.0var d = stride(from: 0, to: 10, by: 2)var e:Range<Int> = 1..<3var f:ClosedRange<Int> = 1...3//循环他们只有整数的闭合区间才能便利for g in a{print(g)}}//元组 类似于py的元组,实际元组并不存在
func yuan_study(){var p = (1,"张三",10,"age","man")var p2 = (id:1,name:"张三",age:10,unit:"age",sex:"man")print(p.0)print(p2.name)}//可选类型func emtry_study(){var i = Int("1")//Optional=可选类型print(type(of: i))//!代表解包 ,如果你确定存在就可以解包print(i!)var a:String?="project12"var b:Optional<Int> = 1var c:Int? = Optional.some(34)var d:Int? = Optional.noneprint(d == nil)//a为可选类型,后面会被加?print(a?.hasPrefix("project"))}

     关注公众号:资小库,问题快速答疑解惑

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

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

相关文章

Hello 算法:动画图解、一键运行的数据结构与算法教程

Hello 算法 《Hello 算法》是一份开源、免费的数据结构与算法入门教程&#xff0c;特别适合新手。全书采用动画图解&#xff0c;内容清晰易懂&#xff0c;学习曲线平滑&#xff0c;引导初学者探索数据结构与算法的知识地图。源代码可以一键运行&#xff0c;帮助读者通过练习提…

C#中的同步编程和异步编程

1. 简单描述一下同步编程和异步编程 同步编程&#xff1a;按照代码的顺序一行一行执行&#xff0c;如果某个操作需要等待&#xff08;比如读取文件、网络请求、数据库操作等&#xff09;&#xff0c;那么当前的线程就会停下来&#xff0c;一直到这个操作完成了之后&#xff0c…

git学习(一)

一、代码仓库的初始化 1、先在本地操作&#xff0c;不涉及到远程服务器&#xff0c;创建目录mkdir git demo 想要本地创建的目录成为一个远程仓库就需要初始化git init git init 后会发生什么&#xff1f; 2、watch -n 1 -d tind每隔1s打印当前文件目录并且刷新 左边命令 wa…

搞DDR,你是可以看看我的这篇笔记(三)

关于DDR PHY这个部分,是数模混合器件,工作涉及到了很多信号完整性,眼图,模拟等相关的东西我就没讲了。因为确实不太熟悉,只能站在架构、功能、使用上去聊聊。 上一篇我们看了这个图片,简化就是下面这个样子: 其实这个也不太合适~~~ 这样舒服多了,一般DDRC和DDRPHTY都会…

被工信部认可的开源软件治理解决方案

近日&#xff0c;工信部网络安全产业发展中心正式发布了“2023年信息技术应用创新解决方案”&#xff0c;开源网安凭借“基于SCA技术开源软件治理解决方案”顺利入选&#xff0c;成为经工信部认可的优秀解决方案&#xff0c;这是开源网安连续两届荣获此荣誉。 工业和信息化部网…

17.延迟队列

介绍 延迟队列&#xff0c;队列内部是有序的&#xff0c;延迟队列中的元素是希望在指定时间到了以后或之前取出和处理。 死信队列中&#xff0c;消息TTL过期的情况其实就是延迟队列。 使用场景 1.订单在十分钟内未支付则自动取消。 2.新创建的店铺&#xff0c;如果十天内没…

【Redis系列】RedisTemplate的使用与注意事项

目录 一.什么是RedisTemplate 二.如何使用RedisTemplate RedisTemplate的API 序列化 三.StringRedisTemplate 一.什么是RedisTemplate RedisTemplate 是一个工具类&#xff0c;由 Spring 官方提供的方便操作 Redis 数据库的一个工具类&#xff0c;来源于 org.springframe…

【LLM】-10-部署llama-3-chinese-8b-instruct-v3 大模型

目录 1、模型下载 2、下载项目代码 3、启动模型 4、模型调用 4.1、completion接口 4.2、聊天&#xff08;chat completion&#xff09; 4.3、多轮对话 4.4、文本嵌入向量 5、Java代码实现调用 由于在【LLM】-09-搭建问答系统-对输入Prompt检查-CSDN博客 关于提示词注入…

涉密移动载体智能柜管控系统DW-S404|国产自主可控

东识移动载体管控系统载体柜系统采用RFID识别技术&#xff0c;结合智能载体管理软件&#xff0c;实现了文件载体权限管理、定位管理、智能存取、智能盘点、在线监控等功能&#xff0c;同时对文件载体进行规范化、智能化、自动化管理。工作人员通过授权进行文件、载体、卷宗等存…

C# 简单的单元测试

文章目录 前言参考文档新建控制台项目新建测试项目添加引用添加测试方法测试结果(有错误)测试结果&#xff0c;通过正规的方法抛出异常 总结 前言 听说复杂的项目最好都要单元测试一下。我这里也试试单元测试这个功能。到时候调试起来也方便。 参考文档 C# 单元测试&#xf…

这一文,关于 Java 泛型的点点滴滴 一(泛型基础、类型擦除)

作为一个 Java 程序员&#xff0c;用到泛型最多的&#xff0c;我估计应该就是这一行代码&#xff1a; List<String> list new ArrayList<>();这也是所有 Java 程序员的泛型之路开始的地方啊。 不过本文讲泛型&#xff0c;先不从这里开始讲&#xff0c;而是再往前…

富唯智能转运机器人:高效、智能、未来的选择

在现代工业中&#xff0c;高效的物流和物料处理是提升生产效率的关键。富唯智能转运机器人&#xff0c;以其卓越的技术和智能化的设计&#xff0c;为各行业提供了完美的解决方案。 产品概述 富唯智能转运机器人搭载ICD系列核心控制器&#xff0c;拥有多种移载平台&#xff0c…

dpdk编译安装以及接收udp报文(基于ubuntu)

目录 1、编译 2、设置运行环境 3、使用dpdk接收udp报文 3.1、设置发送端arp信息 3.2、测试 3.3、代码 4、其他 1、编译 代码下载&#xff1a; DPDK 下载版本&#xff1a;DPDK 19.08.2 export RTE_SDK/root/dpdk-stable-19.08.2/ export RTE_TARGETx86_64-native-li…

Python 教程(五):理解条件语句和循环结构

目录 专栏列表前言条件语句if 语句elif 语句else 语句示例 循环结构for 循环while 循环break 和 continue实例演示 循环控制语句range 函数enumerate 函数 模式匹配总结 在前四篇教程中&#xff0c;我们学习了 Python 的基本语法和数据结构。本篇教程&#xff0c;我们将深入探讨…

lua 游戏架构 之 游戏 AI (八)ai_tbl 行为和优先级

定义一系列的AI行为类型和它们的优先级&#xff0c;以及一个映射表ai_tbl来关联每种AI行为类型与对应的脚本文件和优先级。以下是对代码的详细解释&#xff1a; lua 游戏架构 之 游戏 AI &#xff08;一&#xff09;ai_base-CSDN博客https://blog.csdn.net/heyuchang666/artic…

【ACM独立出版,高录用】第四届物联网与机器学习国际学术会议(IoTML 2024,8月23-25)

2024年第四届物联网与机器学习国际学术会议&#xff08;IoTML 2024&#xff09;将于2024年8月23-25日在中国南昌召开。 会议将围绕着物联网和机器学习开展&#xff0c;探讨本领域发展所面临的关键性挑战问题和研究方向&#xff0c;以期推动该领域理论、技术在高校和企业的发展和…

【全国大学生电子设计竞赛】2022年A题

&#x1f970;&#x1f970;全国大学生电子设计大赛学习资料专栏已开启&#xff0c;限时免费&#xff0c;速速收藏~

信息收集总结

关注内容 1. 企业股权架构&#xff1a;了解公司的股权结构&#xff0c;确定控股子公司&#xff0c;收集边缘业务系统资产。 2. 网站备案&#xff1a;获取公司的备案信息&#xff0c;包括根域名及其子域名。 3. 对外发布的产品&#xff1a;收集公司公开发布的产品信息&…

剑指Meta?1230 亿参数,Mistral 发布 Large 2 旗舰 AI 模型

7 月 25 日消息&#xff0c;AI 竞赛日益激烈&#xff0c;Meta 公司昨日推出开源 Llama 3.1 模型之后&#xff0c;法国人工智能初创公司 Mistral 也加入了竞争行列&#xff0c;在今日凌晨推出了新一代旗舰模型 Mistral Large 2。 Mistral AI 发布 Mistral Large 2&#xff0c;1…

[算法题]添加字符

题目链接: 添加字符 因为数据量很小, 所以直接两层遍历暴力求解, 依次将字符串 A 与字符串 B 相同位进行比对, 每轮记录当前轮次不相等的位数是几位, 并与历史上记录的比较取小值, 图示: 经过比较后, 题解就为 1, 空白处不用管, 因为题意是可以在开头和末尾添加字符的, 添加与…