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 個元素? 元素的值都是 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 数组的全部內容,希望文章能夠幫你解決所遇到的問題。