集合类型
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