文档章节

swift 数组

法斗斗
 法斗斗
发布于 2016/03/03 12:25
字数 1305
阅读 9
收藏 0
//

//  main.swift

//  swift数组

//

//  Created by zhangbiao on 14-6-15.

//  Copyright (c) 2014 理想. All rights reserved.

//


import Foundation


println("数组")


/*

Swift 语言中的数组用来按顺序存储相同类型的数据

*/



//1.定义数组

var numarr:Int[] = [1,3,5,7,9];

var strarr:String[] = ["理想","swift"];




//2.访问和修改数租

//(1)数组长度   访问数组中的某个元素

println("strarr 数租的长度为:\(strarr.count) 数组的 1个值为:\(strarr[0])");

//(2)向数组中追加元素

strarr.append("ios");

//运行结果:[理想, swift, ios]





//(3)使用加法赋值运算符(+=)也可以直接在数组后面添加元素

strarr+="android";

//运行结果:[理想, swift, ios, android]






//(4)直接向数组最后添加一个数组

strarr+=["AAA","BBB","CCC"];

//运行结果:[理想, swift, ios, android, AAA, BBB, CCC]





//(5)使用Index 向数组中插入元素

strarr.insert("000",atIndex:2);

//运行结果:[理想, swift, 000, ios, android, AAA, BBB, CCC]





//(6)使用removeAtIndex 删除某个数组元素  注意 removeAtIndex() 是有返回值的,返回的就是删除的元素

strarr.removeAtIndex(2);

//运行结果:[理想, swift, ios, android, AAA, BBB, CCC]





//(7)删除数组的最后一个元素

strarr.removeLast();

//运行结果:[理想, swift, ios, android, AAA, BBB]





//(8)使用enumerate函数来遍历数租 返回值是一个元组

for bgen in enumerate(strarr)

{

    println("元素下标:\(bgen.0)  元素值:\(bgen.1)");

}

//运行结果:

/*

元素下标:0  元素值:理想

元素下标:1  元素值:swift

元素下标:2  元素值:ios

元素下标:3  元素值:android

元素下标:4  元素值:AAA

元素下标:5  元素值:BBB

*/







//(9)使用构造语法来创建数组

//创建一个Int数据类型构成的空数组:

var nums=Int[]();

//创建一个自定义数据类型构成的空数组:

class Student  // 创建一个类 ,后面会具体说,这里就是为了得到这个类的类型

{

    //数据成员和成员函数略

    

}

var students = Student[]();  // students 是一个Student 类型的数组





//(10)创建特定大小并且所有数据都被默认值得数组

var  nums2 = Int[](count: 5, repeatedValue:3);  // 个元素  元素的值都是 3

println(nums2);

//运行结果:[3, 3, 3, 3, 3]






//(10)数组的赋值和拷贝行为

/*

特点:数组的拷贝行为只有在必要时才会发生


将一个数组(Array)实例赋给一个变量或常量,或者将其作为参数传递给函数或方法调用,在事件发生时数组的内容不会被拷贝。当你在一个数组内修改某一元素,修改结果也会在另一数组显示。


数组的拷贝行为仅仅当操作有可能修改数组长度时才会发生


解决数组拷贝问题确保数组的唯一性


*/


var testarr1:Int[]=[1,2,3,4,5];

var testarr2=testarr1;

println(" testarr1:\(testarr1)\n testarr2:\(testarr2)");

//执行结果

/*

testarr1:[1, 2, 3, 4, 5]

testarr2:[1, 2, 3, 4, 5]

*/


testarr1[1]=1000;//改变testarr1 中第二个(下标为1)的元素的值为 1000 ,**注意:根据数组的拷贝机制 testarr2也会该改变

println(" testarr1:\(testarr1)\n testarr2:\(testarr2)");

//执行结果

/*

testarr1:[1, 1000, 3, 4, 5]

testarr2:[1, 1000, 3, 4, 5]

*/


testarr2.removeLast();//删除数组的最后一个元素,改变数组长度,数组发生拷贝行为

println(" testarr1:\(testarr1)\n testarr2:\(testarr2)");

testarr1[1]=2;//改变testarr1 中第二个(下标为1)的元素的值为 1000 ,**注意:根据数组的拷贝机制testarr2中的元素不在会改变,以为在在数组长度改变时,已经发生了数组的拷贝行为

println(" testarr1:\(testarr1)\n testarr2:\(testarr2)");

//执行结果:

/*

testarr1:[1, 2, 3, 4, 5]

testarr2:[1, 1000, 3, 4]

*/




//解决数组拷贝问题确保数组的唯一性

/*

在操作一个数组,或将其传递给函数以及方法调用之前是很有必要先确定这个数组是有一个唯一拷贝的。通过在数组变量上调用unshare方法来确定数组引用的唯一性。(当数组赋给常量时,不能调用unshare方法)

如果一个数组被多个变量引用,在其中的一个变量上调用unshare方法,则会拷贝此数组,此时这个变量将会有属于它自己的独立数组拷贝。当数组仅被一个变量引用时,则不会有拷贝发生



*/


var testarr4:Int[]=[1,2,3,4,5];

var testarr5=testarr4;

var testarr6=testarr5;

testarr5.unshare(); //调用 unshare方法,则会拷贝此数组,此时 testarr5 将会有属于它自己的独立数组拷贝

testarr5[2]=0;

println("testarr4: \(testarr4)\n testarr5:\(testarr5) \n testarr6:\(testarr6)");

//执行结果:

/*

testarr4: [1, 2, 3, 4, 5]

testarr5:[1, 2, 0, 4, 5]

testarr6:[1, 2, 3, 4, 5]

*/



//强制复制数组

/*我们通过调用数组的copy方法进行强制显性复制。这个方法对数组进行了浅拷贝(shallow copy),并且返回一个包含此拷贝的新数组。

*/



var names = ["Mohsen""Hilary""Justyn""Amy""Rich""Graham""Vic"]

var copiedNames = names.copy();

copiedNames[0] = "Mo"

println(names[0]);

// 执行结果: Mohsen



//说明:如果你仅需要确保你对数组的引用是唯一引用,请调用unshare方法,而不是copy方法。unshare方法仅会在确有必要时才会创建数组拷贝。copy方法会在任何时候都创建一个新的拷贝,即使引用已经是唯一引用。


本文转载自:

共有 人打赏支持
法斗斗
粉丝 20
博文 367
码字总数 17774
作品 0
杨浦
程序员
07-Swift中的数组

数组 1 数组的介绍 2 数组的初始化 数组的初始化 在声明一个Array类型的时候可以使用下列的语句之一 声明的数组需要进行初始化才能使用,数组类型往往是在声明的同时进行初始化的 3 对数组的...

不孤独的美食家
2016/08/06
4
0
【译】Swift算法俱乐部-二维数组

本文是对 Swift Algorithm Club 翻译的一篇文章。 Swift Algorithm Club是 raywenderlich.com网站出品的用Swift实现算法和数据结构的开源项目,目前在GitHub上有18000+⭐️,我初略统计了一下...

Andy_Ron
09/25
0
0
【译】Swift算法俱乐部-选择排序

本文是对 Swift Algorithm Club 翻译的一篇文章。 Swift Algorithm Club是 raywenderlich.com网站出品的用Swift实现算法和数据结构的开源项目,目前在GitHub上有18000+⭐️,我初略统计了一下...

Andy_Ron
09/28
0
0
【译】Swift算法俱乐部-线性搜索

本文是对 Swift Algorithm Club 翻译的一篇文章。 Swift Algorithm Club是 raywenderlich.com网站出品的用Swift实现算法和数据结构的开源项目,目前在GitHub上有18000+⭐️,我初略统计了一下...

Andy_Ron
09/19
0
0
从 JSON 到 Model: 协议默认方法让生活更简单

背景 在 从 API 生成 Model 代码开源脚本中生成的模型代码中, 我们默认生成了 方法.假设就是如下的 Model 我们经常需要得到的是 一个 数组. 完善之路 也许我们会写如下的方法: 上面的代码,对...

李海珍
2016/12/25
23
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql 数据类型及占用字节数

数字类型 TINYINT                           1 字节 SMALLINT                          2 个字节 MEDIUMINT                         3 个字节...

会游泳的鱼_
44分钟前
3
0
高性能mysql:创建高性能的索引

性能优化简介 MySQL性能定义为完成某件任务所需要的时间量度,换句话说,性能即响应时间,这是一个非常重要的原则。我们通过任务和时间而不是资源来测量性能。数据库服务器的目的是执行SQL语...

背后的辛酸
59分钟前
4
0
HTTP get、post 中请求json与map传参格式

import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;import java.nio.charset.Charset;import java.util.ArrayList;import java.util.List;im......

寒风中的独狼
今天
3
0
IDEA中tomcat启动慢 耗时10分钟

用idea中的tomcat以debug模式启动,会非常的慢,而正常启动没啥问题;原因是debug模式中View Breakpoints断点代码,断点的是jar包,而现在启动由于jar包发生变化,导致启动时一直处于等待中。...

GoodMarver
今天
5
0
Linux学习-10月18(awk)

9.6/9.7 awk 一、awk简介   1. awk是一种编程语言,用于对文本和数据进行处理的   2. 具有强大的文本格式化能力   3. 利用命令awk,可以将一些文本整理成为我们想要的样子   4. 命令awk...

wxy丶
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部