Swift 笔记 (四) —— 集合类型

集合类型
Swift 提供了两种集合类型, Array, Dictionary
Array与Dictionary 都须要存同样类型的数据  //实际測试的时候发现能够混杂类型,以下有样例
Array 是有序的, Dictionary 是无序的
Dictionary须要一组无唯一的索引用于查找,也就是key

Array
原型: Array<SomeType>, SomeType指的是要放在Array里的数据类型

var myArray: String[] = [“var1”, “var2”, “var3”]
能够简写为:
var myArray = [“var1”, “var2”, “var3”]

假设给定了Array的类型的话。那么Array里就仅仅能存一种特定的类型,但假设是简写的形式的话。混杂的数据类型居然也能够!

到眼下为止,官方的文档上还没有提及这样的特性:

 var myArray = [“string1”, 1, 2]    //xcode是能够显示出来正确的结果的。可能兴许章节有介绍吧

还能够初始化一个空Array
var myInts = Int[]()

或者把全部值初始为同样的值
var myDouble = Double[](count:3, repeatedValue: 0.0)

方法
cout (取得Array中的元素个数)
count (取得Array中的元素个数)(感谢 swift技术交流第一平台(355277)的群友 夕颜(1651150754) 指出错别字 )
myArray.count

isEmpty (Bool型返回值, 用于推断Array是不是空的)
myArray.isEmpty

append (给Array追加元素,在最后)
myArray.append(“hello”)

+=  (这个类型append。可是更牛,能够把两个Array连起来)   //感谢Swift苹果超级群(191026105)的群友Shawn·Shoper(369201170)指正
+=  (这个类似append,可是更牛,能够把两个Array连起来)

myArray += “world”
myArray += [“hello”, “kitty"]
myArray += myArray
但要注意的是,刚才我们创建的“混杂数据类型“的myArry,就是那个 [“string1", 1, 2] 是不能够这样操作的,编辑器会报错:Could not find an overload for “+=“ that accepts the supplied arguments

insert(atIndex:) (在指定下标插入元素)
myArray.insert(“need”, atIndex: 0)  //这是延续了objective-c的写法吧
在一个越界的下标位置插入是不被同意的,由于Array是连续的

removeAtIndex(index:) (删除指定下标位置的元素)
myArray.removeAtIndex(0)

removeLast (删除最后一个元素)
myArray.removeLast()

removeAll(keepCapacity:)  (删除全部元素)
myArray.removeAll(keepCapacity: false) 

删除全部元素还有个办法:
myArray = [] //显然这样的方法非常好用。可是和removeAll比,哪个快,就须要在程序里測了

下标语法 (subscript syntax)
var myFirstItem = myArray[0]  //下标从0開始

还能够用范围型下标。

。。好雷:

myArray[2…3] = [“china”, “shanghai”]  
值得注意的是。这里用了...也就是下标为 2,3,4,而赋值的数量却能够不同,这里有两种情况须要说明:
1. 下标数多于新值数 :非常好解释。多了的扔掉
2.  下标数少于新值数: 非常奇妙。这个数组会在多出来的值的地方,在给定的最大下标处開始插入。而原本在后面的值,会往后移

当然,这里都是指变量数组。而不是常量数组

越界
越界依旧会崩溃…这个就不多说了

遍例
1. for-in
for item in myArray {
     println(item)
}

2. enumerate
这是个全局的函数
for (index, value) in enumerate(myArray) {
     println (“item \(index +1): \(value)”)
}

Dictionary
key要唯一, 假设对一个已经有的key操作,会改掉原值
与 NSDictionary和 NSMutableDictionary不同的是,Dictionary能够使用不论什么对象做为key和value

原型: Dictionary<KeyType, ValueType> //依据官方文档的描写叙述,能够知道Dictionary就是个哈稀表
全部Swift的基本数据类型。String, Int, Double, Bool 全都能够做为key

与Array类似的初始化方法:
var myDictionary: Dictionary<String, String> = [“china”: “panda”, “australia”:”kangaroo"]

因为Swift能够依据数值去推断数据类型,所以Dictionary一样能够不用指定类型初始化:
var myDictionary = [“china”: “panda”, “australia”:”kangaroo”]

与Array类似。也能够创建一个空的Dictionary:
var myDictionary = Dictionary<String, String>()

清空Dictionary里的元素:
myDictionary = [:]          //注意这里的冒号

方法
count (取得Dictionary中的key-value对的数量)
myDictionary.count

updateValue(forKey:) (改某一个key的值)
myDictionary.updateValue(“duckbill”, forKey:”australia")

也能够写成
myDictionary[“australia”] = “duckbill"

遍例
for-in
for (country, animal) in myDictionary {
     println(“counter: \(country) , animal: \(animal)”)
}

也能够单独遍例key
for country in myDictionary.keys {…}

单独遍例value
for animal in myDictionary.values {…}

也能够把key 或者 value拿出来创建一个Array
var myKeyArray = Array(myDictionary.keys)
var myValueArray = Array(myDictionary.values)

定长与不定长
官方文档上叫 mutable 和 immutable (可变,不可变)
我认为这里隐藏一条信息:
并非元素不可改,而是长度不可变,比方
let myArray = [1,2,3]  //这个Array 就仅仅能有3个元素,不能多也不能少,但能够改变里面的值
let myDictionary = [1:”1”, 2:”2”]    //类似Array

posted @ 2017-07-30 12:38  jzdwajue  阅读(167)  评论(0编辑  收藏  举报