Swift基础——数组Array
Swift基础——数组Array
数组:使用有序列表存储同一类型的多个值,相同值可出现在一个数组的不同位置。
数组简介
首先,和String一样我们也来看看他的一些Api方法
常规操作方法
reverse、reversed:数组反转
reverse()在原数组操作,reversed()返回新的数组不会操作破坏原数组
swapAt:指定索引位置交换
记住startIndex这些索引是从“1”开始数的哦
数组添加合并
数组元素替换
数组增删
当然删除等这些运用加以其他操作就会变得很神奇,我们尝试使用闭包语句来感受一下:
排序我们都知道默认升序,我们可以使用闭包使其降序排序:
到这里,尾部加ed大概应该能看出来是什么意思了吧,既然氛围铺垫到这里了,那就再演示一个排序例子吧:
下面看看这些简单一维数组用到的代码示例吧
//import UIKitimport Foundation
import Darwin//定义数组
var arrString = Array<String>()
var arrFloat = Array<Float>()
var arrFloat2 = [Float]()
var arrString2 = [String]()
//定义数组并赋值
var arrInt = [0 , 1 , 2 , 3 , 4 ]
//查看数组中元素数量
arrInt.count
//判空
arrInt.isEmpty
//是否包含指定元素
arrInt.contains(3)
//分别获取数组首个和末尾元素
arrInt.first
arrInt.last
//分别获取数组中最大和最小元素
arrInt.max();
arrInt.min();
//数组反转
arrInt.reverse()
arrInt.reversed()//交换指定索引位置的元素
arrInt.swapAt(0, 1)
arrInt.swapAt(arrInt.startIndex , arrInt.endIndex - 1)
//打乱数组顺序让数组内所有元素随机排列
arrInt.shuffled()
arrInt.shuffle()
//数组可以直接进行元素合并
arrInt += [5]
//数组添加元素末尾添加
arrInt.append(6)
//把数组索引换成另一些元素
arrInt[2...4] = [7]
arrInt
arrInt[0] = 1arrInt
//插入:在数组索引1位置插入10
arrInt.insert(10, at: 1)
//删除:删除第一个元素索引0位置,并返回删除后数组
arrInt.dropFirst()
//删除最后一个元素并返回被删除后的元素
arrInt.popLast()
arrInt
//删除指定位置元素
arrInt.remove(at: 1)
//删除素质里的所有元素
arrInt.removeAll()var strArr = ["张鑫乐" , "张三" , "张员外" , "嫦娥" , "乐宝"]
//使用闭包删除所有“张”开头的元素
strArr.removeAll{$0.hasPrefix("张")}
strArrarrInt = [1 , 9 , 2 , 8 , 3 , 7 , 4 , 6 , 5]
arrInt.sort()
arrInt
//闭包实现降序排序并返回排序后数组
let arrInt1 = arrInt.sorted(by: {$0 > $1})
arrInt
arrInt1//我们设定字符串数组以字符串长度进行排序
var str = ["1" , "22" , "333" , "4444" , "55555"]
str
str.sort(by: {left , right inreturn left.count > right.count
})
str
二维数组创建及数组遍历
二维数组创建
嗯。。。。发现了吧本质就是一维数组里面还有一个一维数组
数组遍历
完了吗?当然没有,再看看其他几种遍历方式吧:
看出来Swift的包容性了吧,继续看看其他的吧:
遍历索引和值
forEach遍历
数组遍历基本就结束了,我们来关心一些其他的小问题,嗯。。。比如如何比较两个数组差异:
difference:获得差异
来瞅瞅这里用到的这些代码示例吧:
//import UIKitimport Foundation//定义二维数组:直接赋值两个一维数组
var arr1 = [1 , 2 , 3]
var arr2 = [1 , 2 , 3]
var arr = [arr1 , arr2]//定义二维数组并指定为整数类型
var arrInt = Array<Array<Int>>()
//把那俩一维数组添加进来
arrInt.append(arr1)
arrInt.append(arr2)
arrInt
//数组遍历,循环
for row in arrInt{for column in row{//print(column)}
}//当然还有按索引遍历
for i in 0..<arr1.count{print(arr1[i])
}
//当然Swift嘛很随意的,我们可以省略这个索引
for item in arr1{print(item)
}
//你以为这是Swift的极限?开玩笑,他甚至引入了sql语句的条件判断
var strArr = ["张鑫乐" , "张三" , "李四" , "张大仙"]
for item in strArr where item.hasPrefix("张"){print(item)
}//遍历数组索引和值
for (index , value) in strArr.enumerated(){print("\(index) : \(value)")
}
//forEach遍历
strArr.forEach{item inprint(item)
}
//比较数组差异
var strArrCopy = ["张鑫乐" , "张三" , "李四" , "张大脚"]
let dif = strArr.difference(from: strArrCopy)
print(dif)
数组常用操作
字符串与数组的转换
split:把字符串转换为数组
joined:数组合并成字符串
zip:可以将两个序列中的元素一一对应的方式重新组合成一个序列
可是如果元素个数对应不上怎么办?直接看结果:
数组过滤
filter、allSatisfy、where、partition等
partition:定位排序,类似于快排中的定位数字
min、max:获取序列中的最小值、最大值
氛围到这了都,感受一下字典吧,后续会详细介绍
prefix:数组截取
drop:顾名思义丢弃
数组降维
诺,顾名思义啦,就是把多位数组通过一些方法转换为维度更低的数组
flatMap:获取每个数组元素并放在一个一维数组里
最后看看这个部分用到的代码示例吧:
//import UIKitimport Foundationlet str1 = "I have 8 girls"
//以“ ”分割转换为数组闭包转换
let arr1 = str1.split{$0 == " "}
arr1
//当然我们也可以不使用闭包,类似Java那样就可
let arr2 = str1.split(separator: " ")
arr2
//当然用闭包的话还有比Java更牛掰的后续会介绍闭包
let arr3 = str1.split{$0.isNumber};
arr3//以某字符合并数组
let str2 = arr2.joined(separator: " ")//介绍一个zip函数
arr1
let arr4 = [1 , 2 , 3 , 4 , 5]
let zip1 = zip(arr4, arr1)
for (num , words) in zip1{print("\(num) : \(words)")
}//filter
var arr5 = ["张鑫乐","张晓泽","陈小理","白一晓","张三丰","佐佐木"]
let arr6 = arr5.filter{$0.hasPrefix("张")}
arr6
//allSatisfy:全部满足
var arr7 = [1 , 2 , 3 , 4]
var arr8 = [1 , 2 , 6 , 7]
let isBig = arr7.allSatisfy({$0 < 5})
let isSmall = arr8.allSatisfy({$0 < 5})
isBig
isSmall
//where:条件处理类似sql,当然这个加以循环会有更多操作,此处我们只演示first与last
//从前往后第一个>2的元素
let num1 = arr7.first(where: {$0 > 2})
num1
//从后往前第一个<6的元素
let num2 = arr8.last(where: {$0 < 6})
num2
//从前往后第一个2的元素索引下标
let index1 = arr7.firstIndex(of: 2)
index1
//从后往前第一个2的元素索引下标
let index2 = arr7.lastIndex(of: 3)
index2
//当然这个同样也可以引入where就不展示了var arr9 = [1 , 2 , 3 , 8 , 9 , 7 , 6 , 5 , 4]
let sort = arr9.partition {$0 > 5}
arr9//最大值最小值
var arr10 = [1 , 2 , 3 , -8 , -9 , 7 , 6 , 5 , 4]
let minNum = arr10.min();
let maxNum = arr10.max();
//当然还有abs求绝对值
let absNum = arr10.max {abs($0) < abs($1)}
absNumlet arr11 = ["张鑫乐" : 520 , "张三丰" : 250 , "张天爱" : 110]
let maxArr = arr11.max {$0.value < $1.value}
maxArrarr10
//返回小于5的序列
let num3 = arr10.prefix{$0 < 5}
num3
//返回索引下标前的元素组成序列,不包含当前及左闭右开
arr10
let num4 = arr10.prefix(upTo: 5)
//返回n个元素组成的子序列
let num5 = arr10.prefix(4)
//返回从数组开始到指定位置的子序列右也闭
let num6 = arr10.prefix(through: 5)arr10
//遍历如果小于n跳过,当遇到>=7时返回其以及其后的元素作为数组
let num7 = arr10.drop{$0 < 7}
num7
//丢弃前n个返回剩余元素组成的数组
let num8 = arr10.dropFirst(3)arr7 = [1 , 2 , 3 , 4]
arr8 = [5 , 6 , 7 , 8]
var arr12 = [arr7 , arr8]
//flatMap:获取每个数组元素并放在一个一维数组里
var arr13 = arr12.flatMap{$0}
arr13
//当然这个有空值nil时也会体现出来
var arr14 = [5 , 6 , nil , nil]
var arr15 = [arr7 , arr14]
arr15
//compactMap:去空
var arr16 = arr15.flatMap {$0}.compactMap {$0}
arr16
私货彩蛋:我从不后悔对任何人好,哪怕是我看错的人,哪怕我被辜负。因为,我对你好,不是因为你有多好,只是因为我很好 —— 慧海大师
Swift基础——数组Array相关推荐
- asp子窗口读取父窗口数据_算法与数据结构基础 - 数组(Array)
数组基础 数组是最基础的数据结构,特点是O(1)时间读取任意下标元素,经常应用于排序(Sort).双指针(Two Pointers).二分查找(Binary Search).动态规划(DP)等算法.顺 ...
- JavaScript – 6.JS面向对象基础(*) + 7.Array对象 + 8.JS中的Dictionary + 9.数组、for及其他...
6.JS面向对象基础(*) 7.Array对象 7.1 练习:求一个数组中的最大值.定义成函数. 7.2 练习:将一个字符串数组输出为|分割的形式,比如"刘在石|金钟国|李光洙|HAHA|宋 ...
- Java编程语言学习:Java语言编程的基础知识之Java的变量与数据类型、符号、运算符、数组Array总结之详细攻略
Java编程语言学习:Java语言编程的基础知识之Java的变量与数据类型.符号.运算符.数组Array总结之详细攻略 目录 Java语言编程的基础知识之Java的变量与数据类型.符号.运算符.数组总 ...
- js数组Array基础【万字长文】
简介 JavaScript的 Array 对象是用于构造数组的全局对象,数组是类似于列表的高阶对象,用于在单个的变量中存储多个值. 创建数组 1.构造函数创建数组(new Array()) let a ...
- SHELL/SSH基础知识(入门篇)-包含 shell 脚本语言的基本用法、 shell 脚本语言的基本用法、流程控制、函数 function、其它脚本相关工具、数组 array(欢迎留言交流)
目录 1 shell 脚本语言的基本用法 1.1 shell 脚本注释规范 1.1.1 shell 脚本注释规范 1.1.2 执行(5种) 1.1.3 在远程主机运行本地脚本 1.1.4 检查shel ...
- 2个字符串相等 swift_Swift快速入门(一)之 Swift基础语法
Swift快速入门(一)之 Swift基础语法 近期重新学习了一遍Swift语言,主要以<Swift编程权威指南(第2版)>为教程,学习过程中结合比对Java语言特性将学习心得作为三篇笔记 ...
- Swift基础语法: 25 - Swift的类和结构体
在我们实际开发的过程中, 类和结构体是人们创建代码时所用的一种通用且灵活构造体, 为了在类和结构体中实现各种功能,我们必须要严格按照对于常量,变量以及函数所规定的语法规则来定义属性和添加方法. 但是在 ...
- Swift基础知识概述
第二章: Swift基础知识概述 1. 三件事 学习Swift语言 学习Xcode 理解ios开发组件,API.SwiftUI.SDK等 从以上三个方面自己修练.不用担心. 2. 开始学习 首先看一段 ...
- cjson 对象是json数组型结构体_C语言 - cJSON解析特定格式 含有数组array类型的数据...
在ESP32中使用了cJSON库,发现很好用.最近服务器端的JSON格式越来越多样,还是有些注意点,需要做下笔记记录下来. cJSON *MAC_arry = cJSON_GetObjectItem( ...
最新文章
- ref与out的区别
- Oracle timestamp 转换 date
- 当我们输入一条SQL查询语句时,发生了什么?
- 在python中等号前面与后面分别是什么意思-Python中冒号等于(:=)是什么意思?...
- DL之BM:BM的前世今生
- Mission系统预览
- 自然数,实数,有理数,整数,分数,无理数
- 为github帐号添加SSH keys
- android 10 apk 存储适配,AndroidQ(10) 分区存储适配方法
- win7备份工具_一键重装win7系统教程,如何重装win7系统
- JavaScript之字符串类型
- sqlserver Month()函数取日期不足两位的加 0
- SpringBoot下载Excel文件,在Wps上可以打开但是Office上的excel打不开的问题
- prometheus-预警-6
- 如何区分加密、压缩、编码?
- 从零开始:小程序开发环境搭建详解
- iPhone无法连接电脑原因分析及解决
- matlab设计一个病态(矩阵)系统,MATLAB_2_矩阵处理
- 9月数学建模国赛,报名组队与【近10年赛题知识点趋势】
- CAD如何渲染图形?