数组、集合、元组、字典

每一门语言基本都会有这些数据结构,swift也不例外,而作为一门现代的语言,swift提供了很多的现成的方法给我们选择。

一、数组

01 数组的定义

// 三种声明方式
var a = [1, 2, 3] // 类型推断
var b:[String] = ["hello", "world"]
var c:Array<Double> = [1.3, 2.2] // 结构体
var e = Array(repeating: -1, count: 3) // 通过初始化器生成一个初始值为-1,长度为3的数组 e = [-1, -1, -1] let f = [1, 2, 4] // 作为一个常量,不可修改

当定义数组为Any类型时,可以让其中元素为不同类型的变量。var a:[Any] = [1, 2, "SSR"]

如何定义空数组?

var d = [Int]() // 通过初始化器,定义可变的空数组

02 数组的遍历

查看单个元素,swift数组和其他语言一样:

print(a[2])
a[0] = 1

遍历所有元素:

var array = ["a", 2, "3"]

直接遍历:

for item in array {
print(item)
} "a"
2
"3"

根据索引进行遍历:

for index in 0..<array.count {
print(array[index])
} "a"
2
"3"

控制范围进行遍历:

for item in array[1...2] {
print(item)
} 2
"3"

03 数组的增删改查

增:

  1. array.append(1)在末尾添加一个元素;
  2. array + ["hello", "world"]直接利用加号;
  3. array.insert("aaa", at: 1)在a[1]的位置插入"aaa"。

删:

  1. array.remove(at: 0)删除索引0的位置

改:

  1. array.replaceSubrange((0...1), with: ["mac", "windows", "lalala"])将数组a[0]到a[1]替换为mac与windows和lalala。

查:

  1. array.contains("Hello")array中有元素为contains的值时,返回true;

二、集合

01 集合的定义

set集合是无序且不重复的数据集合。

var a:Set = [1, 2, 3]
var b:Set<String> = ["hello", "world"]
var c:Set<Int> = [1, 2, 3]
var d:Set = ["A", 1] // 报错

1. 不重复的集合

var a:Set = [1, 1]
print(d) // [1],swift会自动把多的删掉

2. 无序的集合

var a:Set = [1, 2, 3]
print(a) // 每次输出都不同
// [1, 2, 3]
// [3 ,1 ,2]

02 集合的增删改查

var a:Set = [1, 2, 3]
a.count // a的长度
a.insert(5) // 插入5(集合是无序的,所以不用说明位置)
a.remove(1) // 删除1
a.contains(2) // true

三、元组

01 元组的定义

元组类型由 N个任意类型的数据组成(N >= 0),组成元组类型的数据可以称为“元素”。

  • var a = (1, 1.5, "hello", true)

  • 上面这种是利用了swift的数据类型推断,如果想要更精确,我们还可以这么操作:var a:(Int, String, Bool) = (1, "hello", false)

这两种方式最为常见。

还可以用:

  • var a = (name1: "Xu", name2: "hangyu")
  • var a:(age:Int, name:String) = (20, "Xuhangyu") // 这样定义元组必须规定数据类型
  • var (age, name) = (20, "Xuhangyu")

来定义元组。

元组可以直接赋值:var b = a,并且元组并不是引用类型,a和b独立拥有各自的内存,元组是值类型的数据,他的复制并不是浅复制

02 元素的访问

var a = (1, 1.5, "hello", true)
print(a.0) // 1
print(a.3) // "hello"

如果在定义时定义了元素名,我们就可以使用:print(a.name1)来访问对应的数据。

如果使用了var (age, name) = (20, "Xuhangyu")定义元组,可以用print(age)来访问数据,但如果是普通的定义,必须使用print(a.name1)

四、字典

var a = [1: "asdasd", 2: "123"]
var b:Dictionary<String,String> = ["a":"123", "b":"lalal"]
var c = [1: 1, 2: 2 ]

如何定义空字典?

var a = [Int:String]() // 和定义空数组方法类似

01 字典的取值

var a = ["a": "123", "b": "12333333"]
print(a["a"]) // Optional("123")
print(a["a"] ?? "undefined")

02 字典的修改与添加与删除

var a = ["a": "123", "b": "12333333"]
a.updateValue("dilidili", forKey: "a") // 有该key时修改
a.updateValue("dilidili", forKey: "c") // 没有该key时新增
a.removeValue(forKey: "a") // 删除

Swift初探02 数组、集合、元组、字典的更多相关文章

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

    Swift提供了三种主要的集合类型,称为数组,集合和字典,用于存储值集合. 数组是有序的值集合. 集是唯一值的无序集合. 字典是键值关联的无序集合. Swift中无法再使用传统形式的for循环. // ...

  2. 初学swift笔记-数组、字典、元组(三)

    数组的使用.字典的使用.元组的使用 import Foundation //1.定义数组 //集合数据 数组.字典 ,,,]//常用定义 ,,,]//常用定义 ,,,]//范型定义 ,,,] arr_ ...

  3. python中列表 元组 字典 集合的区别

    列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计 ...

  4. OC: 数组、集合、字典

    数组.字典.集合 参考1   参考2  参考3  参考4  参考5 NSArray * nn  = @[@"元素1",@"元素2",@"元素3&quo ...

  5. 使用JavaScriptSerializer序列化集合、字典、数组、DataTable为JSON字符串 分类: 前端 数据格式 JSON 2014-10-30 14:08 169人阅读 评论(0) 收藏

    一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大 ...

  6. day_6深浅拷贝,元组字典集合类型定义和各种操作方法

    首先我们来讲一下深浅拷贝 1:值拷贝,假设一个列表等于L1 再定义一个L2=L1  这样就是值拷贝 L2只是存的L1存列表的地址,所以当L1发生改变,L2也随之改变 2:浅拷贝,L2=L1.copy( ...

  7. 列表 list 容器类型数据(str字符串, list列表, tuple元组, set集合, dict字典)--->元组 tuple-->字符串 str

    # ### 列表 list 容器类型数据(str字符串, list列表, tuple元组, set集合, dict字典) # (1)定义一个列表 listvar = [] print(listvar, ...

  8. Python 基础补充(一) 列表、元组、集合、字典的区别和相互转换

    一.列表.元组.集合.字典的区别   列表 元组 集合 字典 英文 list tuple set dict 可否读写 读写 只读 读写 读写 可否重复 是 是 否 是 存储方式 值 值 键(不能重复) ...

  9. Python中字符串、列表、元组、集合、字典中的一些知识,有些不太常见

    ————————笔记——————————# 字符串1. 字符串是不可变的.2. 字符串切片输出:`[start:end:step]`.使用`a[::-1]`倒序输出字符串.3. `str.split( ...

随机推荐

  1. Leetcode刷题之矩阵中的指针用法

    矩阵中的指针用法 1 快慢指针 ​ Leetcode27移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度.不要使用额外的数组 ...

  2. 超声波模块HC-SR04简介以及编程

    HC-SR04 一.主要参数1:使用电压:DC-5V2:静态电流:小于2mA3:电平输出:高5V4:电平输出:底0V5:感应角度:不大于15度6:探测距离:2cm-450cm7:高精度 可达0.2cm ...

  3. Centos7 离线安装 KVM,并安装 Csr1000v

    最近需要在客户环境搭建 csr1000v,客户环境不能联网,同时使用 kvm 管理.所以需要离线安装 kvm,在利用 kvm 安装 csr100v ,中间遇到不少坑,现记录如下. 所有安装步骤是在 r ...

  4. H5扇形

    使用H5 canvas绘制的可交互扇形 requestAnimationFrame() 现有动画实现方式的不足 setTimeout和setInterval都不十分精确.为它们传入的第二个参数,实际上 ...

  5. vuex基础详解

    vuex入门 安装 vuex为我们提供了两种使用方法 直接引入 vuex下载地址:https://unpkg.com/vuex@2.0.0 下载之后用< script >标签包裹引入即可 ...

  6. [computer vision] Bag of Visual Word (BOW)

    Bag of Visual Word (BoW, BoF, 词袋) 简介 BoW 是传统的计算机视觉方法,用一些特征(一些向量)来表示一个图像.BoW的核心思想是利用一组较为通用的特征,将图像用这些特 ...

  7. java对象有什么重要的?

    3.历史上讲,对象有什么重要的?  [新手可忽略不影响继续学习]早期的编程主要是面向过程的编程,处理的问题都相对的简单,比较过程化,换句话说,就是一步一步从开始到结束,比如第一步进入电梯,第二步关门, ...

  8. B03. BootstrapBlazor实战 10分钟编写数据库维护项目

    demo演示的是Sqlite驱动,FreeSql支持多种数据库,MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/神通/人大金仓/翰高/华为Ga ...

  9. Blazor组件自做六 : 使用JS隔离封装Baidu地图

    1. 运行截图 演示地址 2. 在文件夹wwwroot/lib,添加baidu子文件夹,添加baidumap.js文件 2.1 跟上一篇类似,用代码方式异步加载API,脚本生成新的 body > ...

  10. C++STL 中的数值算法(iota、accumulate、adjacent_difference、inner_product、partial_sum)

    以下算法均包含在头文件 numeric 中 ##1.iota 该函数可以把一个范围内的序列从给定的初始值开始累加 先看用法. 例: 假设我需要一个长度为10,从5开始递增的序列 vector<i ...