# Swift 数组之基本操作
假如有如下数组变量:
```
var numbers = [1,2,3,4,5]
var vowels = ["A","E","I","O","U"]
var emptyArray = [Int]()
```
## 数组查找
### 获取数组元素个数
```
vowels.count
```
### 判断数组是否为空
```
numbers.isEmpty
emptyArray.isEmpty
```
### 获取数组元素
```
vowels[1] // E
```
### 获取数组中第一个元素,返回的是可选型
```
vowels.first // A
```
### 获取数组中最后一个元素,返回可选型
```
vowels.last // U 或者 vowels[ vowels.count - 1 ]
emptyArray.first // nil
if let firstVowel = vowels.first{
"The first vowel is " + firstVowel
}
```
### 获取最小,最大值
```
numbers.min() // 1
vowels.max() // U
```
### 使用范围获取数组的子数组
```
numbers[2..<4]
numbers[2..<numbers.count]
```
### 判断某个数组是否包含某个值(返回布尔类型)
```
vowels.contains("A") // true
vowels.contains("B") // false
```
### 遍历数组
普通遍历数据方式
```
for number in numbers{
number
}
// 想当于
for index in 0..<numbers.count{
numbers[index]
}
```
遍历数组同时获取数组的索引
```
for (index , value) in vowels.enumerated() {
print("\(index+1) : \(value)")
}
```
### 数组的比较(比较的是值)
```
var oneToFive = [1, 2, 3, 4, 5]
numbers == oneToFive // true
var oneToFive2 = [1, 2, 4, 3, 5]
numbers == oneToFive2 // false
```
## 数组的增删改操作
假如有如下数组变量。
```
var list = ["Apple", "Orange"]
```
### 新增
#### 新增数组元素
下面列举一些新增数组元素的方法。
```
list.append("Pear")
list += ["Banner"] // 使用 += 的方式添加数组元素必须添加的是一个数组,并且数组中的类型要与之前的一直,比如这里的字符串
list = list + ["Watermelon","Grape"]
list // ["Apple", "Orange", "Pear", "Banner", "Watermelon", "Grape"]
```
#### 新增数组单元到指定索引处
在Swift中可以很方便的将元素添加到某个索引值的位置,换言之填写的索引为新增的元素所在的索引位置。
```
list.insert("Cantaloupe", at: 2)
list // ["Apple", "Orange", "Cantaloupe", "Pear", "Banner", "Watermelon", "Grape"]
```
> 注意:小心数组越界的问题。
### 删除元素
#### 删除第一个元素
快速删除数组的第一个元素。
```
list.removeFirst()
list // ["Orange", "Cantaloupe", "Pear", "Banner", "Watermelon", "Grape"]
```
#### 删除最后一个元素
快速删除数组的最后一个元素
```
list.removeLast()
list // ["Orange", "Cantaloupe", "Pear", "Banner", "Watermelon"]
```
#### 根据索引删除数组单元
```
list.remove(at: 1)
list // ["Orange", "Pear", "Banner", "Watermelon"]
```
> 注意:小心数组越界的问题。
#### 根据范围删除数组单元
```
list.removeSubrange(0..<2)
list // ["Banner", "Watermelon"]
```
> 注意:小心数组越界的问题。
#### 删除所有数组单元
```
list.removeAll()
list // []
```
### 修改
#### 修改具体元素
```
list = ["Apple","Orange","Pear","Watermelon"]
list[0] = "Banner"
print(list) // ["Banner", "Orange", "Pear", "Watermelon"]
```
#### 根据区间范围修改元素
先获取元素的值然后进行赋值修改。
```
list[1...2] = ["Cantaloupe","Grape"]
print( list ) // ["Banner", "Cantaloupe", "Grape", "Watermelon"]
```
#### 修改范围
```
list[1...3] = ["Grape"]
print( list ) // ["Banner", "Grape"]
```
> 无论是使用索引还是使用区间修改数组,都可能产生数组越界的问题。
### 其他操作
#### filter
`filter(includeElement: (T) -> Bool) -> [T]`
```
let bigNumbers = [2, 47, 118, 5, 9].filter({ $0 > 20 }) // bigNumbers = [47, 118]
```
#### map
`map(transform: (T) -> U) -> U`
```
let stringified; [String] = [1, 2, 3].map({ String($0) }) // ["1", "2", "3"]
```
#### refuce
`reduce(initial: U, combine: (U, T) -> U) -> U`
```
let sum: Int = [1, 2, 3].reduce(0){ $0 + $1} // add up the numbers in the Array.
let sum = [1, 2, 3].reduce(0, +) // some thing because `+` is a function in Swift.
```
- 学习笔记
- 基础
- 基本类型之整型
- 基本类型之浮点型
- 基本类型之布尔类型以及简单的 if 语句
- 基础类型之元组
- 基本类型之其他
- 运算符
- 基础运算符
- 比较运算符、逻辑运算符
- 三元运算符
- 范围运算符for-in
- 逻辑控制
- 循环结构
- 选择结构
- 字符串
- Character和Unicode
- String.index 和 range
- 可选型
- 容器类
- 数组初始化
- 数组基本操作
- 字典初始化
- 字典基本操作
- 集合初始化
- 集合基本操作
- 函数
- 闭包
- 枚举
- 结构体
- 类
- 文档注释
- 属性和方法
- 下标和运算符重载
- 拓展和泛型
- 协议
- 其他
- Swift 3.0 For 循环
- Swift 随机数的生成
- IOS开发玩转界面 UIKit
- UILable 文本显示控件
- UIButton 简单的交互控件
- UIImageView 图片控件
- UISearchBar 搜索控件