//

//  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);  // 有5 个元素  元素的值都是 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方法会在任何时候都创建一个新的拷贝,即使引用已经是唯一引用。

转载于:https://www.cnblogs.com/Free-Thinker/p/5602575.html

swift Array 数组相关推荐

  1. Swift基础——数组Array

    Swift基础--数组Array 数组:使用有序列表存储同一类型的多个值,相同值可出现在一个数组的不同位置. 数组简介 首先,和String一样我们也来看看他的一些Api方法 常规操作方法 rever ...

  2. Swift3 - String 字符串、Array 数组、Dictionary 字典的使用

    Swift相关知识,本随笔为 字符串.数组.字典的简单使用. ///****************************************************************** ...

  3. NSArray element failed to match the Swift Array Element type错误的解决方法

    在用swift调用yy_model生成的嵌套数组模型的时候回报错如下 错误的解决方法: Thread 1: Precondition failed: NSArray element failed to ...

  4. JavaScript引用类型之Array数组之强大的splice()方法

    splice()方法可以说是Array数组最强大的方法,他的用法很多,主要用法是向数组的中部插入项! 下面是它的用法: arrayObject.splice(index,howmany,element ...

  5. 列表(list)、元组(tuple)、字典(dictionary)、array(数组)-numpy、DataFrame-pandas 、集合(set)...

    一.列表(list) 一组有序项目的集合.可变的数据类型[可进行增删改查] 列表是以方括号"[]"包围的数据集合,不同成员以","分隔. 列表中可以包含任何数据 ...

  6. php手册数组函数,PHP - Manual手册 - 函数参考 - Array 数组函数 - array_diff计算数组的差集...

    PHP - Manual手册 - 函数参考 - Array 数组函数 - array_diff计算数组的差集 array_diff (PHP 4 >= 4.0.1, PHP 5) array_d ...

  7. Js Array数组ES5/ES6常用方法

    Js Array数组ES5/ES6常用方法 1.栈方法(先进后出) push():在数组的最后一项后追加值(参数:可以为多个值或数组) 返回:数组的长度,改变了原数组. var a=[1,2,3] a ...

  8. Java中Arrays.toString ()打印二维数组及Array数组的常用操作

    1.Java中Arrays.toString () 已知打印一维数组的API为System.out.println ( Arrays.toString ();,其参数为数组名或数组指针,其支持的数据类 ...

  9. doctrine find的对象转换成数组_「ES6基础」Array数组的新方法(上)

    在日常工作中我们经常会与数组打交道,因此需要熟练掌握数组操作的相关方法,ES6中关于数组的操作,又给我们带来了哪些惊喜呢,Array数组操作又添加了哪些新方法? 本篇文章将从以下几个方面进行介绍: A ...

最新文章

  1. Elasticsearch 安装和使用
  2. [AS3 3D Demo] Stage3D学习过程中开发的3个Demo
  3. 汇编语言 字符串的复制
  4. unity调用普通java类_Unity中C#和Java的相互调用实例代码
  5. 喜茶获美团点评旗下基金4亿元投资!它离行业独角兽还差多远?
  6. import是引进外部函数吗_vue3已正式发布,你学了吗
  7. RVC使用指南(二)-集群管理
  8. spring mvc + ajax上传文件,页面局部刷新
  9. Leetcode-9-回文数(简单)
  10. stm32F407 调试 LAN8720A ping不通问题解决
  11. word中插入pdf图片(矢量图、高清图)
  12. Do You Even Need Attention? A Stack of Feed-Forward Layers Does Surprisingly Well on ImageNet
  13. 蓝桥杯练习:费解的开关
  14. 分布式计算系统导论:原理与组成pdf
  15. css+js+jq实训笔记
  16. flask android app socketio加解密 匿名加密聊天室 不被任何官方非官方机构个人监视的匿名聊天室!!! 想聊什么就聊什么!
  17. 山东省中小企业数字化转型论坛成功举办,九州云赋能中小企业数智升级
  18. 蒲公英内测托管平台是干什么的?
  19. SQL 实验项目6_存储过程
  20. MyBatis-Plus 代码生成器最新版配置方案

热门文章

  1. 关于matlab的单精度与双精度
  2. 欧几里得算法扩展欧几里得算法
  3. Python剑指offer:数组中重复的数字
  4. java propertysource_[spring] @PropertySource
  5. ztree 拖动树结构的移动组件样式不见了怎么办?
  6. 写爬虫,不会正则怎么行?
  7. 在微信小程序中调用本地接口
  8. BZOJ 3236[AHOI2013]作业
  9. Unity 3D 一个简单的角色控制脚本
  10. 封装对MongoDB数据库的增删改查访问方法(基于MongoDB官方发布的C#驱动)