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

来源:互联网 发布:手机钢琴软件 编辑:程序博客网 时间:2024/05/21 20:59
集合类型
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

0 0
原创粉丝点击