swift笔记-集合
Swift 语言提供经典的数组和字典两种集合类型来存储集合数据。数组用来按顺序存储相同类型的数据。字典虽然无序存储相同类型数据值但是需要由独有的标识符引用和寻址(就是键值对)。 Swift 语言里的数组和字典中存储的数据值类型必须明确。 这意味着我们不能把不正确的数据类型插入其中。 同时这也说明我们完全可以对获取出的值类型非常自信。 Swift 对显式类型集合的使用确保了我们的代码对工作所需要的类型非常清楚,也让我们在开发中可以早早地找到任何的类型不匹配错误。
数组数组使用有序列表存储同一类型的多个值。相同的值可以多次出现在一个数组的不同位置中。 Swift 数组特定于它所存储元素的类型。这与 Objective-C 的 NSArray 和 NSMutableArray 不同,这两个类可以存储任意类型的对象,并且不提供所返回对象的任何特别信息。在 Swift 中,数据值在被存储进入某个数组之前类型必须明确,方法是通过显式的类型标注或类型推断,而且不是必须是 数组的简单语法写 Swift 数组应该遵循像 数组构造语句我们可以使用字面量来进行数组构造,这是一种用一个或者多个数值构造数组的简单方法。字面量是一系列由逗号分割并由方括号包含的数值。 下面这个例子创建了一个叫做 var shoppingList: [String] = ["Eggs","Milk"]
// shoppingList 已经被构造并且拥有两个初始项。
在这个例子中,字面量仅仅包含两个 由于 Swift 的类型推断机制,当我们用字面量构造只拥有相同类型值数组的时候,我们不必把数组的类型定义清楚。 var shoppingList = ["Eggs","Milk"]
因为所有字面量中的值都是相同的类型,Swift 可以推断出 访问和修改数组我们可以通过数组的方法和属性来访问和修改数组,或者下标语法。还可以使用数组的只读属性 println("The shopping list contains (shoppingList.count) items.")
// 输出"The shopping list contains 2 items."(这个数组有2个项)
使用布尔项 if shoppingList.isEmpty {
println("The shopping list is empty.")
} else {
println("The shopping list is not empty.")
}
// 打印 "The shopping list is not empty."(shoppinglist不是空的)
也可以使用 shoppingList.append("Flour")
// shoppingList 现在有3个数据项,有人在摊煎饼
除此之外,使用加法赋值运算符( shoppingList += ["Baking Powder"]
// shoppingList 现在有四项了
shoppingList += ["Chocolate Spread","Cheese","Butter"]
// shoppingList 现在有七项了
可以直接使用下标语法来获取数组中的数据项,把我们需要的数据项的索引值放在直接放在数组名称的方括号中: var firstItem = shoppingList[0]
// 第一项是 "Eggs"
注意第一项在数组中的索引值是 我们也可以用下标来改变某个已有索引值对应的数据值: shoppingList[0] = "Six eggs"
// 其中的第一项现在是 "Six eggs" 而不是 "Eggs"
还可以利用下标来一次改变一系列数据值,即使新数据和原有数据的数量是不一样的。下面的例子把 shoppingList[4...6] = ["Bananas","Apples"]
// shoppingList 现在有六项
调用数组的 shoppingList.insert("Maple Syrup",atIndex: 0)
// shoppingList 现在有7项
// "Maple Syrup" 现在是这个列表中的第一项
这次 类似的我们可以使用 let mapleSyrup = shoppingList.removeAtIndex(0)
// 索引值为0的数据项被移除
// shoppingList 现在只有6项,而且不包括Maple Syrup
// mapleSyrup常量的值等于被移除数据项的值 "Maple Syrup"
数据项被移除后数组中的空出项会被自动填补,所以现在索引值为 firstItem = shoppingList[0]
// firstItem 现在等于 "Six eggs"
如果我们只想把数组中的最后一项移除,可以使用 let apples = shoppingList.removeLast()
// 数组的最后一项被移除了
// shoppingList现在只有5项,不包括cheese
// apples 常量的值现在等于"Apples" 字符串
数组的遍历我们可以使用 for item in shoppingList {
println(item)
}
// Six eggs
// Milk
// Flour
// Baking Powder
// Bananas
如果我们同时需要每个数据项的值和索引值,可以使用全局 for (index,value) in enumerate(shoppingList) {
println("Item (index + 1): (value)")
}
// Item 1: Six eggs
// Item 2: Milk
// Item 3: Flour
// Item 4: Baking Powder
// Item 5: Bananas
更多关于 创建并且构造一个数组我们可以使用构造语法来创建一个由特定数据类型构成的空数组: var someInts = [Int]()
println("someInts is of type [Int] with (someInts.count) items。")
// 打印 "someInts is of type [Int] with 0 items。"(someInts是0数据项的Int[]数组)
注意 除此之外,如果代码上下文中提供了类型信息, 例如一个函数参数或者一个已经定义好类型的常量或者变量,我们可以使用空数组语句创建一个空数组,它的写法很简单: someInts.append(3)
// someInts 现在包含一个INT值
someInts = []
// someInts 现在是空数组,但是仍然是[Int]类型的。
Swift 中的 var threeDoubles = [Double](count: 3,repeatedValue:0.0)
// threeDoubles 是一种 [Double]数组,等于 [0.0,0.0,0.0]
因为类型推断的存在,我们使用这种构造方法的时候不需要特别指定数组中存储的数据类型,因为类型可以从默认值推断出来: var anotherThreeDoubles = Array(count: 3,repeatedValue: 2.5)
// anotherThreeDoubles is inferred as [Double],and equals [2.5,2.5,2.5]
最后,我们可以使用加法操作符( var sixDoubles = threeDoubles + anotherThreeDoubles
// sixDoubles 被推断为 [Double],2.5]
集合集合用来存储相同类型并且没有确定顺序的值。当集合元素顺序不重要时或者希望确保每个元素只出现一次时可以把集合当做是数组另一形式。
Set类型语法Swift中的 创建和构造一个Set你可以通过构造器语法创建一个特定类型的空集合: var letters = Set<Character>()
println("letters is of type Set<Character> with (letters.count) items.")
// 打印 "letters is of type Set<Character> with 0 items."
注意这里的 另外,如果上下文提供了类型信息,比如作为函数的参数或者已知类型的变量或常量,你可以通过一个空的数组字面量创建一个空的 letters.insert("a")
// letters现在含有1个Character类型的值
letters = []
// letters现在是一个空的Set,但是它依然是Set<Character>类型
集合与数组字面量你可以使用一个数组字面量来构造一个集合,并且可以使用简化形式写一个或者多个值作为集合元素。 下面的例子创建一个称之为 var favoriteGenres: Set<String> = ["Rock","Classical","Hip hop"]
// favoriteGenres被构造成含有三个初始值的集合
这个
一个 var favoriteGenres: Set = ["Rock","Hip hop"]
由于数组字面量中的所有元素类型相同,Swift可以推断出 访问和修改一个Set你可以通过 为了找出一个 println("I have (favoriteGenres.count) favorite music genres.")
// 打印 ""I have 3 favorite music genres.""
使用布尔属性 if favoriteGenres.isEmpty {
println("As far as music goes,I'm not picky.")
} else {
println("I have particular music preferences.")
}
// 打印 "I have particular music preferences."
你可以通过调用 favoriteGenres.insert("Jazz")
// favoriteGenres 现在包含4个元素
你可以通过调用 if let removedGenre = favoriteGenres.remove("Rock") {
println("(removedValue)? I'm over it.")
} else {
println("I never much cared for that.")
}
// 打印 "Rock? I'm over it."
使用 if favoriteGenres.contains("Funk") {
println("I get up on the good foot.")
} else {
println("It's too funky in here.")
}
// 打印 "It's too funky in here."
遍历一个Set你可以在一个 for genre in favoriteGenres {
println("(value)")
}
// Classical
// Jazz
// Hip hop
更多关于 Swift的 -> for genre in sorted(favoriteGenres) {
println("(genre)")
}
// prints "Classical"
// prints "Hip hop"
// prints "Jazz
完成集合操作你可以高效的完成 构造集合下面的插图描述了两个集合-
let oddDigits: Set = [1,3,5,7,9]
let evenDigits: Set = [0,2,4,6,8]
let singleDigitPrimeNumbers: Set = [2,7]
sorted(oddDigits.union(evenDigits))
// [0,1,2,3,4,5,6,7,8,9]
sorted(oddDigits.intersect(evenDigits))
// []
sorted(oddDigits.subtract(singleDigitPrimeNumbers))
// [1,9]
sorted(oddDigits.exclusiveOr(singleDigitPrimeNumbers))
// [1,9]
集合比较下面的插图描述了三个集合-
let houseAnimals: Set = [" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |