swift Array 数组
//
// 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
个元素
元素的值都是
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方法会在任何时候都创建一个新的拷贝,即使引用已经是唯一引用。
swift Array 数组的更多相关文章
- iOS - Swift Array 数组
前言 public struct Array<Element> : CollectionType, MutableCollectionType, _DestructorSafeContai ...
- [Swift]Array数组的swapAt函数
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- iOS -Swift 3.0 -Array(数组与可变数组相关属性及用法)
// // ViewController.swift // Swift-Array // // Created by luorende on 16/9/12. // Copyright © 2016年 ...
- Swift中实现Array数组和NSArray数组的相互转换与遍历
Array是Swift中的数组数据类型.而NSArray是OC中的数组数据类型.两者有差别有联系.在Swift中有时候难免会使用到OC中的一些东西.今天我们就来Swift中使用NSArray和Arra ...
- Swift3 - String 字符串、Array 数组、Dictionary 字典的使用
Swift相关知识,本随笔为 字符串.数组.字典的简单使用,有理解.使用错误的地方望能指正. ///************************************************** ...
- 窥探Swift之数组安全索引与数组切片
今天是元宵节,祝大家元宵节快乐!在Swift中的数组和字典中下标是非常常见的,数组可以通过索引下标进行元素的查询,字典可以通过键下标来获取相应的值.在使用数组时,一个常见的致命错误就是数组越界.如果在 ...
- 窥探Swift之数组与字典
说到数组和字典,只要是编过程的小伙伴并不陌生.在Swift中的数组与字典也有着一些让人眼前一亮的特性,今天的博客就来窥探一下Swift中的Array和Dictionary.还是沿袭之前的风格,在介绍S ...
- Swift 之数组与字典
http://www.cocoachina.com/swift/20151230/14802.html 说到数组和字典,只要是编过程的小伙伴并不陌生.在Swift中的数组与字典也有着一些让人眼前一亮的 ...
- 了解PHP中的Array数组和foreach
1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组 . 2.例子:一般的数组 这里,我 ...
随机推荐
- 贴板子系列_1-exgcd
exgcd ll exgcd(ll a,ll b,ll &x,ll &y) { ) { x=;y=;return a; } ll r=exgcd(b,a%b,x,y); ll t=x; ...
- asp.net中Web使用Socket
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- 解决java.lang.NoClassDefFoundError: org.jdom.Content
报错:java.lang.NoClassDefFoundError: org.jdom.Content 解决办法: 更新lib目录下的jdom.jar 至最新版本.
- Android 图片比较
Android中图片比较大致的流程如下: 将Drawable对象转化成Bitmap对象.(实际比较的是Bitmap对象,假设为B1和B2) 将B1和B2中的像素取出,分别放在2个数组中.(实际存储的是 ...
- 代码演示C#中string和StingBuilder内存中的区别
关于 string和StringBuilder的区别参考MSDN.本文用程序演示它们在内存中的区别,及其因此其行为不同. //Demo string memory model namespace C ...
- c#生成注册码的两种方法(mac地址与IP地址)
using System; using System.Management; using System.Security.Cryptography; using System.IO; using Sy ...
- [C# 网络编程系列]专题五:TCP编程
转自:http://www.cnblogs.com/zhili/archive/2012/08/25/2656840.html 前言 前面专题的例子都是基于应用层上的HTTP协议的介绍, 现在本专题来 ...
- codeforces --- 279C Ladder
C. Ladder time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...
- HDU-3790 最短路径问题
最短路径问题 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submis ...
- JavaScript---网络编程(9-1)--DHTML技术演示(2-1)-表格创建的几种方式
一:用最底层的方式,该方式用来创建别的对象树也可以 代码演示: <html> <head> <title>DHTML技术演示---表格创建--用最底层的方式,其实该 ...