5 数组 Swift/Object-C ——《Swift3.0从入门到出家》原创连载

5 数组 Swift/Object-C ——《Swift3.0从入门到出家》

数组


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 语句就是实现交换功能*
            if tmp_arr[j] < tmp_arr[j + 1] {
            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)

        }                

    }

}

拓展阅读

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容