集合类型
cout (取得Array中的元素个数)
+= (这个类型append,但是更牛,可以把两个Array连起来)
//感谢Swift苹果超级群(191026105)的群友Shawn·Shoper(369201170)指正
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)
方法
count (取得Array中的元素个数)(感谢 swift技术交流第一平台(355277)的群友 夕颜(1651150754) 指出错别字 )
myArray.count
isEmpty (Bool型返回值, 用于判断Array是不是空的)
myArray.isEmpty
append (给Array追加元素,在最后)
myArray.append(“hello”)
+=
(这个类似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