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.例子:一般的数组 这里,我 ...
随机推荐
- 使用SeaJS实现模块化JavaScript开发(新)
本文转自张洋,因为SeaJS更新版本很快,所以原文中很多地方不太适用,在这里发布一个更新版. 前言 SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaSc ...
- bzoj 2482: [Spoj GSS2] Can you answer these queries II 线段树
2482: [Spoj1557] Can you answer these queries II Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 145 ...
- discuz 门户栏目URL跳转异常的问题
“SEO设置-URL静态化”的问题.
- linux使用ps1设置命令行提示符
要自定义命令行提示,需要ps1来设置.完成自定义需要以下几个步骤: 1.编辑~/.bashrc文件 vi ~/.bashrc 2.在.bashrc文件中添加以下一行自定义内容 export PS1=& ...
- USB 2.0 A型、B型、Mini和Micro接口定义及封装
USB全称Universal Serial Bus(通用串行总线),目前USB 2.0接口分为四种类型A型.B型.Mini型还有后来补充的Micro型接口,每种接口都分插头和插座两个部分,Micro还 ...
- Android用户界面 UI组件--TextView及其子类(一) TextView
1.TextView android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none /web/email/phone/map/a ...
- 虚拟机安装了ubuntu,忘记密码修复
在虚拟机中按照以下步骤重新为用户设定新密码. 重启Ubuntu,随即长按shift进入grub菜单: 选择recovery mode,回车确认: 在Recovery Menu中,选择“Root Dro ...
- Chapter 17 Replication
Chapter 17 Replication Table of Contents 17.1 Replication Configuration 17.2 Replication Implementat ...
- dump datafile block
Oracle dump datafile block有两种方式: 然后根据block id执行dump 命令: SQL> alter system dump datafile 4 block 2 ...
- Red Hat linux 如何增加swap空间
按步骤介绍 Red Hat linux 如何增加swap空间 方法/步骤 第一步:确保系统中有足够的空间来用做swap交换空间,我使用的是KVM,准备在一个独立的文件系统中添加一个swap交换文件,在 ...