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.例子:一般的数组 这里,我 ...
随机推荐
- 30年的Hello world
30 年的 Hello world 转载自:http://www.admin10000.com/document/2398.html 最近我在7月4日这一天所在的那周休假了.休假期间,我利用大把的时间 ...
- [Codeforces Round #254 div1] C.DZY Loves Colors 【线段树】
题目链接:CF Round #254 div1 C 题目分析 这道题目是要实现区间赋值的操作,同时还要根据区间中原先的值修改区间上的属性权值. 如果直接使用普通的线段树区间赋值的方法,当一个节点表示的 ...
- VS2010 C# 调用Web Service .
转自:http://blog.csdn.net/fenglailea/article/details/7262566 打开VS2010,打开"文件-新建-网站",选择"A ...
- CF_91B
题目意思是这样的:给定n个整数,求第i个数右边的距离它最远的比它小的数的下标之差然后再减1. 这里既然是需要知道距离该数最远的下标,可以从右至左扫描一遍,然后按照单调递减的顺序入栈,即只把比栈顶元素小 ...
- php 返回json 解析 报Wide character in print
php 返回json: zabbix:/var/www/html/DEVOPS/Home/Lib/Action# vim EquipmentAction.class.php <?php head ...
- Delphi-idHttp-JSON用法
从国外网站抄来的代码 Delphi source: http := TIdHttp.Create(nil);http.HandleRedirects := True;//允许头转向http.ReadT ...
- structs 源码示例
http://blog.csdn.net/wwwihpccn/article/details/5725518
- ODAC with Oracle Developer Tools for Visual Studio
c#开发Oracle数据库的时候,需要本机没有安装过 Oracle 客户端,直接下载 ODAC with Oracle Developer Tools for Visual Studio工具安装即可 ...
- log4j的使用方法
1.Log4j是什么? Log4j可以帮助调试(有时候debug是发挥不了作 用的)和分析 2.Log4j的概念 Log4j中有三个主要的组件,它们分别是 Logger.Appender和Layout ...
- 荷兰国旗问题 划分成3部分 leecode
public class Solution { public void sortColors(int[] A) { int len=A.length; int beg=0; int end=len-1 ...