Array数组在swift中Array相当于oc中的NSMutableArray(变长数组)

//1.定义数组
var numarr:Int[] = [,,,,];
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("",atIndex:);
//运行结果:[理想, swift, 000, ios, android, AAA, BBB, CCC]
//(6)使用removeAtIndex 删除某个数组元素 注意 removeAtIndex() 是有返回值的,返回的就是删除的元素
strarr.removeAtIndex();
//运行结果:[理想, 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: , repeatedValue:); // 有5 个元素 元素的值都是 3
println(nums2);
//运行结果:[3, 3, 3, 3, 3]
//(10)数组的赋值和拷贝行为
/*
特点:数组的拷贝行为只有在必要时才会发生 将一个数组(Array)实例赋给一个变量或常量,或者将其作为参数传递给函数或方法调用,在事件发生时数组的内容不会被拷贝。当你在一个数组内修改某一元素,修改结果也会在另一数组显示。 数组的拷贝行为仅仅当操作有可能修改数组长度时才会发生 解决数组拷贝问题: 确保数组的唯一性 */ var testarr1:Int[]=[,,,,];
var testarr2=testarr1;
println(" testarr1:\(testarr1)\n testarr2:\(testarr2)");
//执行结果
/*
testarr1:[1, 2, 3, 4, 5]
testarr2:[1, 2, 3, 4, 5]
*/ testarr1[]=;//改变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[]=;//改变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[]=[,,,,];
var testarr5=testarr4;
var testarr6=testarr5;
testarr5.unshare(); //调用 unshare方法,则会拷贝此数组,此时 testarr5 将会有属于它自己的独立数组拷贝
testarr5[]=;
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[] = "Mo"
println(names[]);
// 执行结果: Mohsen //说明:如果你仅需要确保你对数组的引用是唯一引用,请调用unshare方法,而不是copy方法。unshare方法仅会在确有必要时才会创建数组拷贝。copy方法会在任何时候都创建一个新的拷贝,即使引用已经是唯一引用。

  dictionary字典几乎与oc相同

//(1)创建一个字典
var dic:Dictionary<String,String>=["三国演义":"罗贯中","水浒传":"施耐庵","红楼梦":"曹雪芹","西游记":"吴承恩"];
println(dic);
//执行结果:[三国演义: 罗贯中, 水浒传: 施耐庵, 红楼梦: 曹雪芹, 西游记: 吴承恩]
//(2)访问字典
var name=dic["三国演义"];
println(name);
//执行结果:罗贯中
//(3)向字典中添加键值
var student:Dictionary<String,Int> = ["小明":,"小华":,"小红":]; // 声明一个学生字典 键: 姓名 值:学号
//添加
student["理想"]=;
println(student);
//执行结果:[小华: 10002, 小红: 10003, 小明: 10001, 理想: 10004]
//修改
student.updateValue(,forKey:"理想"); // 将理想的学号改为12345 updateValue() 这个方法返回更新值之前的原值。这样方便我们检查更新是否成功
println(student);
//执行结果:[小华: 10002, 小红: 10003, 小明: 10001, 理想: 12345]
//删除
student.removeValueForKey("理想"); //将理想 删除
println(student);
//执行结果:[小华: 10002, 小红: 10003, 小明: 10001]
//获得键对应的值
let value = student["小明"]; //获取小明的对应值
println("小明 的 value 为 \(value)");
//执行结果: 小明 的 value 为 10001
//(4)遍历 for in 字典 会以元组(键,值)的形式返回
for (key,value) in student //无序
{
println("键:\(key) 值:\(value)");
}
//执行结果:
/*
键:小华 值:10002
键:小红 值:10003
键:小明 值:10001
*/
//或者
for tuples in student //无序
{
println("键:\(tuples.0) 值:\(tuples.1)");
}
//我们也可以通过访问他的keys或者values属性(都是可遍历集合)检索一个字典的键或者值
for key in student.keys
{
println("key=:\(key)");
}
//执行结果:
/*
key=:小华
key=:小红
key=:小明
*/
for value in student.values
{
println("value=:\(value)");
}
//执行结果:
/*
key=:10002
key=:10003
key=:10001
*/
//(5)通过构造方法创建字典
var namesOfIntegers = Dictionary<Int, String>()
//(6)字典类型的赋值和拷贝行为
/*
注意:字典和数组的拷贝是不同的
1.无论何时将一个字典实例赋给一个常量或变量,或者传递给一个函数或方法,这个字典会即会在赋值或调用发生时被拷贝。
2.如果字典实例中所储存的键(keys)和/或值(values)是值类型(结构体或枚举),当赋值或调用发生时,它们都会被拷贝。相反,如果键(keys)和/或值(values)是引用类型,被拷贝的将会是引用,而不是被它们引用的类实例或函数 */ var student2=student; // 字典赋值
println(" student 为:\(student)\n student2 为:\(student2) ");
/*
执行结果:
student 为:[小华: 10002, 小红: 10003, 小明: 10001]
student2 为:[小华: 10002, 小红: 10003, 小明: 10001]
*/
student.updateValue(,forKey:"小明"); // 改变 student 中 小明的 value student2不会改变
println(" student 为:\(student)\n student2 为:\(student2) ");
/*
执行结果:
student 为: [小华: 10002, 小红: 10003, 小明: 12345]
student2 为:[小华: 10002, 小红: 10003, 小明: 10001] */

Swift基础语法(三)的更多相关文章

  1. Swift基础语法学习总结(转)

    Swift基础语法学习总结 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型 ...

  2. Swift基础语法学习总结

    Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift ...

  3. Python 基础语法(三)

    Python 基础语法(三) --------------------------------------------接 Python 基础语法(二)------------------------- ...

  4. Swift基础语法

    简介 特点 (1)优于OC,快速,安全 (2)取消了预编译指令包括宏定义(OC用的太多了) (3)取消了OC指针和不安全访问的使用(看不到星星了) (4)舍弃 Objective-C 早期应用 Sma ...

  5. Swift基础语法(常量变量、数据类型、元组、可选、断言)

    本文来自Swift中文开发组,感谢翻译者的分享. 本文将分几部分对Swift对ios的语法做讲解.本文为第一节,主要讲解基础语法. 常量和变量 常量和变量把一个名字(比如maximumNumberOf ...

  6. Swift基础语法 、 元组(Tuple)

    字符串的使用 1.1 问题 Swift的String和Character类型提供了一个快速的,兼容Unicode的方式来处理代码中的文本信息.创建和操作字符串的语法与C语言中字符串类似.本案例将学习如 ...

  7. Swift基础语法学习总结一

    1.基础 1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型,几乎所有类型都是可打印的. ...

  8. 从零开始学 Web 之 ES6(五)ES6基础语法三

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  9. swift基础语法(四) 函数、闭包(Closures)

    //函数基本定义 func 函数名(参数名:参数类型=默认值) ->返回值类型{代码块} //无参无返回值函数 func hsmin(){ } //单参无返回值函数 func prin(st:S ...

随机推荐

  1. Error: Cannot open main configuration file '//start' for reading! 解决办法

    当执行service nagios start启动nagios时,报错:Error: Cannot open main configuration file '//start' for reading ...

  2. Python 监控nginx服务是否正常

    Python 监控nginx服务是否正常 #!/usr/bin/env python import os, sys, time from time import strftime while True ...

  3. lambda表达式和查询表达式

    (1)Lambda表达式定义: Lambda是创建匿名函数的另一种形式.它比对应的匿名方法更加的简化.因此,所有的情况都推荐使用Lambda表达式.   它可以包括表达式和语句,并且用于创建委托和事件 ...

  4. C#中关于异步的三种写法

    1 投票 IAsyncResult ar = d1.BeginInvoke(1, 3000, null, null); while (!ar.IsCompleted) class Program { ...

  5. vs2010边调试边编辑后台.cs文件的办法

    方法一:在web项目的属性页里的web标签页,选中“启用编辑并继续”项 方法二:菜单 工具+选项+调试+编辑并继续,选中“启用编辑并继续”项. 设置完之后,调试web项目的时候可以直接修改.cs文件, ...

  6. 后缀数组 & 题目

    后缀数组被称为字符串处理神器,要解决字符串问题,一定要掌握它.(我这里的下标全部都是从1开始) 首先后缀数组要处理出两个数组,一个是sa[],sa[i]表示排名第i为的后缀的起始位置是什么,rank[ ...

  7. 解决Linux系统下程序找不到动态库的方法

    思路:一般来说,通过make命令已经将程序依赖的动态库编译出来了,通过make install命令已经将动态库安装到系统的某个路径下.找没找到动态库就看这个路径是否包含在系统默认搜索动态库的路径中,如 ...

  8. mysql中的SUBSTRING_INDEX

    SUBSTRING_INDEX(str,delim,count) Returns the substring from string str before count occurrences of t ...

  9. nginx.conf详解

    ##定义nginx运行的用户各用户组user nginx nginx; ##nginx进程数,建议设置与cpu核心数一致worker_processes 1; #为每个进程分配CPU的工作内核 wor ...

  10. Java GC工作原理以及Minor GC、Major GC、Full GC简单总结

    名词解释: GC:垃圾收集器 Minor GC:新生代GC,指发生在新生代的垃圾收集动作,所有的Minor GC都会触发全世界的暂停(stop-the-world),停止应用程序的线程,不过这个过程非 ...