Swift中数组是一种数据结构,用来存放多个形同类型的数据结构,数据在数组内的存放是有序的,存进来的数据个读出来的顺序相同

Object-C 中数组能够存放任意类型的数据类型为[AnyObject]

Swift中数组有两种形式:

可变数组:用var修饰,数组的内容及长度可以任意修改

不可变数组:用let修饰,数组的内容及长度都不能修改

Object-C 数组中也有两种形式

不可变数组:let arr: NSArray = NSArray.init(objects: 10,”hello”,1.234)

可变数组: let arr: NSMutableArray = NSMutableArray.init(capacity:0)

将数组所有内容全部赋给另一个数组(用于表格、集合视图中)

let arr = NSArray.init(array: arr1)

let arr = NSArray.init(object: arr1)

创建空数组(4种):

let arr: [Int]  = [Int]()

let arr: Array<String> = Array<String>()

let arr: [Double] = Array()

let arr: [Int] = []

使用简单方法创建数组:

var arr:[Int] = [1,2,3,4,5,6]

指定元素个数和元素内容:

var arr = Array<Int>(count :2,repeatedValue: 100)

//[100,100]

指定元素内容:

var arr = Array(arrayLiteral:“Hello World”)

判断数组中的元素是否为空

if arr.isEmpty{

print(“空”)

}

if arr.count == 0{

print(“空”)

}

访问数组的元素

根据下边查找:下标从0开始,最后一个元素下标 = 数组中的元素个数 - 1

遍历数组中的所有元素:

Swift:

for i in arr{

print(i)

}

for i in arr.count - 1{

print(arr[i])

}

Objective -C

for i in 0…arr.count - 1{

print(arr[i])

}

for i in arr{

print(i)

}

获取指定范围内的元素:

print(arr[0…2])

查找某个元素首次在数组中出现的位置:

if arr.contains(“Hello”){

print(arr.indexOf(“Hello”)!)

}

Objective - C:

if arr.containsObject(“Hello”){

print(arr.indexOfObject(“Hello”)) // 输出的是索引的地址

}

Objective - C  获取数组中第一个元素和最后一个元素

print(arr.firstObject)

print(arr.lastObject)

向数组中添加内容:

追加单个元素

arr.append(“Swift”)

Objective -C

arr.addObject(“Swift”)

追加整个数组

arr.appendContensOf([1,2,3,4,54])

Objective -C

arr.addObject([1,2,3,4,54])

使用加号追加新的内容

arr += [1,2,3,4,45]

向指定位置插入元素

arr.insert(“swift”,atIndex: 1) //插入单个元素

arr.insertContensOf([1,2,3,4], at : 0) //插入数组

Objective-C

arr.insertObject(“swift”,atIndex: 1)

通过下标区间插入元素

arr[0…2] = [1,”HELLO”,3]

删除数组元素

arr.removeFirst() //删除第一个元素

arr.removeLast() //删除最后一个元素

Swift

arr.removeAtIndex(3) //删除指定索引的元素

Objective-C

arr.removeObjectAtIndex()

Swift

arr.removeRange(0…4) //删除一定范围内的元素

Objective -C

arr.removeObjectInRange(NSRange.init(location:0,length: 1))

Swift

arr.removeAll() //清空整个数组

Objective -C

arr.removeAllObjects

Objective-C

arr.removeLastObject //删除最后一个元素

if arr.containsObject(“123”){ //删除指定元素,重复的会全部删除

arr.removeObject(“123”)

}

修改数组中的内容

arr[4] = “修改的内容” //修改指定下标的元素

arr.replaceRange(0…3,with:[3]) //修改一定范围内的元素

arr[0…3] = [1000,2000]

Objective -C

arr.replaceObjectAtIndex(0,withObject:”1234”)

数组排序

arr.sortInPlace //系统提供的排序函数,只能做升序

冒泡排序:

第一趟:0

100,998,-10,50,1,30

100,-10,998,50,1,30

100,-10,50,998,1,30

100,-10,50,1,998,30

100,-10,50,1,30,998  ------ 998

第二趟:1

-10,100,50,1,30,998

-10,50,100,1,30,998

-10,50,1,100,30,998

-10,50,1,30,100,998  -------100

第三趟:2

-10,50,1,30,100,998

-10,1,50,30,100,998

-10,1,30,50,100,998  -------50

第四趟:3

-10,1,30,50,100,998

-10,1,30,50,100,998  -------30

第五趟:4

-10,1,30,50,100,998  -------1

//冒泡排序外层控制趟数内层控制每一趟比较的次数

for i in 0..<tmp_arr.count - 1{

//比较的趟数=元素的个数-1

for j in  0..<tmp_arr.count - i - 1 {

if tmp_arr[j] < tmp_arr[j + 1] {

//if 语句就是实现交换功能

let tmp = tmp_arr[j]

//交换两个数的大小 使用第三个变量做桥接

tmp_arr[j] = tmp_arr[j + 1]

tmp_arr[j + 1] = tmp

}

}

}

将数组中的元素用指定的字符进行拼接

let arr1:NSArray = [1,2,3,”china”,98.0]

let str1 = arr1.componentJoinedByString(“-”)

//str1 = 1-2-3-china-98.0

将字符串按照指定的字符串进行分割(分割的结果是一个数组)

var arr2: NSArray = str1.componentSeparatedByString(“-”)

交换数组中元素的显示位置

arr.exchangeObjectAtIndex(0,withObjectAtIndex:2)

例子:

// 设计⼀个学生类,成员有姓名,年龄。 要求创建三个学生类对象,分别按年龄升序,名字降序进行排序

class Student {

var name: String

var age: Int

init(name: String,age: Int) {

self.name = name

self.age = age

}

}

let stu1 = Student.init(name: "stu1", age: 10)

let stu2 = Student.init(name: "stu2", age: 7)

let stu3 = Student.init(name: "stu11", age: 20)

let arrayStu = NSMutableArray.init(capacity: 0)

arrayStu.addObject(stu1)

arrayStu.addObject(stu2)

arrayStu.addObject(stu3)

for i in 0..<arrayStu.count - 1 {

for j in 0..<arrayStu.count - 1 - i {

var tmp1 = arrayStu[j] as! Student

var tmp2 = arrayStu[j + 1] as! Student

if tmp1.name < tmp2.name {

arrayStu.exchangeObjectAtIndex(j, withObjectAtIndex: j + 1)

}

}

}

5 数组 Swift/Object-C ——《Swift3.0从入门到出家》的更多相关文章

  1. 4 字符串 Swift/Objective -C ——《Swift3.0从入门到出家》

    4 字符串   Swift and Object-C 字符串由多个字符组成,使用 “” 引起的内容 swift语言中提供了两种字符串:可变字符串和不可变字符串 可变字符串:字符串的内容可以修改,字符串 ...

  2. 9 闭包——《Swift3.0从入门到出家》

    8  闭包 Swift语言中可以使用一块独立代码块替代函数的定义,称独立的代码块为闭包 闭包格式为: {(参数列表)->返回值类型    in 执行语句 } 例子: <1>使用闭包实 ...

  3. 8 函数类型——《Swift3.0从入门到出家

    Swift语言中每一个函数都有它特定的数据类型,称其为函数类型 函数类型和基本数据类型一样,可以定义变量或者常量,可以定义函数形参,也可以做为函数的返回值类型 函数类型的格式为:参数列表的数据类型—& ...

  4. 7 函数——《Swift3.0从入门到出家

    6 函数 函数就是对某个功能的封装,一个swift程序可能由多个函数组成 swift中定义函数的格式: func 函数名称(参数列表) —>函数返回值类型{ 函数体 return } 函数定义要 ...

  5. 10 结构体和类 - —— 《Swift3.0 从入门到出家》

    Swift中的面向对象5个要素:枚举.结构体.类.协议.扩展 面向对象研究的是对象,完成一件事情需要多个对象参与,是生活的映射 Swift中结构体和类非常相似,也就是结构体能完成类的所有功能.结构体是 ...

  6. 3 循环语句——《Swift3.0从入门到出家》

    3 循环语句 当一段代码被多次重复利用的使用我们就使用循环 swift提供了三种形式的循环语句 1.while 循环 2.repeat — while 循环 3.for — in 循环 while 循 ...

  7. 2 分支语句——《Swift3.0 从入门到出家》

    2 分支语句 当程序面临多个选择,每一个选择都会执行不同的代码块,这个时候就要使用分支语句.常见的分支语句有: if 选择语句:if... if…else if…elseif…else if是现实生活 ...

  8. 6 字典和集合——《Swift3.0从入门到出家》

    字典和集合 字典 字典是集合类型存放多个键值对,其中键是唯一的,不能重复 字典中存放的键值对是无序的,写入的顺序和读取的顺序可能不同 字典中存放的数据是任意类型 字典可以分为可变字典和不可变字典 创建 ...

  9. swift学习笔记 - swift3.0用GCD实现计时器

    swift3.0之后,GCD的语法发生了翻天覆地的变化,从过去的c语法变成了点语法,下面是变化之后用GCD实现计时器的方法: 先贴代码: // 定义需要计时的时间 var timeCount = 60 ...

随机推荐

  1. MyEclipse/Eclipse中properties文件中文乱码问题解决

    有时候在myeclipse或者eclipse中打开properties文件时会发现其中的中文都是乱码.这是由于当前的properties文件编码格式不支持汉字造成的.当这种情况发生时,我们可以按照以下 ...

  2. PHP7的五大新特性

    如果你使用的是基于 composer 和 PSR-4 的框架,这种写法是否能成功的加载类文件?其实是可以的,composer 注册的自动加载方法是在类被调用的时候根据类的命名空间去查找位置,这种写法对 ...

  3. centos、linux查找未挂载磁盘格式化并挂载?

    centos.linux查找未挂载磁盘格式化并挂载? df -h 查看当前linux服务器硬盘: fdisk -l /dev/sda   第一块硬盘 /dev/sdb   第二块硬盘 依此类推 以/d ...

  4. eclipse——jsp字体设置

    步骤如下

  5. TCP的滑动窗口

    TCP发送方的窗口可以划分成四个部分: 1.已经发送并且确认的TCP段: 2.已经发送但是没有确认的TCP段: 3.未发送但是接收方准备接收的TCP段, 4.未发送并且接收方也为准备接受的TCP段. ...

  6. Flume-NG源码阅读之FileChannel

    FileChannel是flume一个非常重要的channel组件,非常常用.这个channel非常复杂,涉及的文件更多涉及三个包:org.apache.flume.channel.file.org. ...

  7. combox datagrid重复请求问题

    html代码中利用class声明了datagrid,导致easyUI解析class代码的时候先解析class声明中的datagrid,这样组件就请求了一次url:然后又调用js初始化代码请求一次url ...

  8. log4j.appender.AFile.File日志的相对路径

    log4j.appender.AFile=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.AFile.DatePattern='.'yy ...

  9. Android并发编程之白话文详解Future,FutureTask和Callable

    从最简单的说起Thread和Runnable 说到并发编程,就一定是多个线程并发执行任务.那么并发编程的基础是什么呢?没错那就是Thread了.一个Thread可以执行一个Runnable类型的对象. ...

  10. FM算法 的总结

    FM的总结: 1.FM算法与线性回归相比增加了特征的交叉.自动选择了所有特征的两两组合,并且给出了两两组合的权重. 2.上一条所说的,如果给两两特征的组合都给一个权重的话,需要训练的参数太多了.比如我 ...