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相关推荐

  1. asp子窗口读取父窗口数据_算法与数据结构基础 - 数组(Array)

    数组基础 数组是最基础的数据结构,特点是O(1)时间读取任意下标元素,经常应用于排序(Sort).双指针(Two Pointers).二分查找(Binary Search).动态规划(DP)等算法.顺 ...

  2. JavaScript – 6.JS面向对象基础(*) + 7.Array对象 + 8.JS中的Dictionary + 9.数组、for及其他...

    6.JS面向对象基础(*) 7.Array对象 7.1 练习:求一个数组中的最大值.定义成函数. 7.2 练习:将一个字符串数组输出为|分割的形式,比如"刘在石|金钟国|李光洙|HAHA|宋 ...

  3. Java编程语言学习:Java语言编程的基础知识之Java的变量与数据类型、符号、运算符、数组Array总结之详细攻略

    Java编程语言学习:Java语言编程的基础知识之Java的变量与数据类型.符号.运算符.数组Array总结之详细攻略 目录 Java语言编程的基础知识之Java的变量与数据类型.符号.运算符.数组总 ...

  4. js数组Array基础【万字长文】

    简介 JavaScript的 Array 对象是用于构造数组的全局对象,数组是类似于列表的高阶对象,用于在单个的变量中存储多个值. 创建数组 1.构造函数创建数组(new Array()) let a ...

  5. 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 ...

  6. 2个字符串相等 swift_Swift快速入门(一)之 Swift基础语法

    Swift快速入门(一)之 Swift基础语法 近期重新学习了一遍Swift语言,主要以<Swift编程权威指南(第2版)>为教程,学习过程中结合比对Java语言特性将学习心得作为三篇笔记 ...

  7. Swift基础语法: 25 - Swift的类和结构体

    在我们实际开发的过程中, 类和结构体是人们创建代码时所用的一种通用且灵活构造体, 为了在类和结构体中实现各种功能,我们必须要严格按照对于常量,变量以及函数所规定的语法规则来定义属性和添加方法. 但是在 ...

  8. Swift基础知识概述

    第二章: Swift基础知识概述 1. 三件事 学习Swift语言 学习Xcode 理解ios开发组件,API.SwiftUI.SDK等 从以上三个方面自己修练.不用担心. 2. 开始学习 首先看一段 ...

  9. cjson 对象是json数组型结构体_C语言 - cJSON解析特定格式 含有数组array类型的数据...

    在ESP32中使用了cJSON库,发现很好用.最近服务器端的JSON格式越来越多样,还是有些注意点,需要做下笔记记录下来. cJSON *MAC_arry = cJSON_GetObjectItem( ...

最新文章

  1. ref与out的区别
  2. Oracle timestamp 转换 date
  3. 当我们输入一条SQL查询语句时,发生了什么?
  4. 在python中等号前面与后面分别是什么意思-Python中冒号等于(:=)是什么意思?...
  5. DL之BM:BM的前世今生
  6. Mission系统预览
  7. 自然数,实数,有理数,整数,分数,无理数
  8. 为github帐号添加SSH keys
  9. android 10 apk 存储适配,AndroidQ(10) 分区存储适配方法
  10. win7备份工具_一键重装win7系统教程,如何重装win7系统
  11. JavaScript之字符串类型
  12. sqlserver Month()函数取日期不足两位的加 0
  13. SpringBoot下载Excel文件,在Wps上可以打开但是Office上的excel打不开的问题
  14. prometheus-预警-6
  15. 如何区分加密、压缩、编码?
  16. 从零开始:小程序开发环境搭建详解
  17. iPhone无法连接电脑原因分析及解决
  18. matlab设计一个病态(矩阵)系统,MATLAB_2_矩阵处理
  19. 9月数学建模国赛,报名组队与【近10年赛题知识点趋势】
  20. CAD如何渲染图形?

热门文章

  1. Emacs 安装配置使用教程
  2. NUC980开源项目38-4g上网
  3. help efun matlab,Matlab优化工具箱在函数最值求解中的应用.pdf
  4. DAX: 复购率计算
  5. tipask 3.5问答系统部署说明,超详细命令行部署,挂载iso,可内网使用。
  6. 浅谈Observer观察者模式
  7. gns3使用简要教程(gns3-wireshark捕获教程)
  8. HP34401a实现高精度温度测量
  9. 数据结构1800试题(第2章)
  10. php include file_PHP Include文件实例讲解