swift學習筆記 --- Collection Types

Mutability of Collections

  這取決於是var還是let,var可變,let不可變

Array

  數組裏存放相同類型的對象,swift的Array 橋接於 OC裏的NSArray

如何規定數組類型

   有兩種方式來確定規定數組裏所放數據的類型。第一是 Array<Element>,第二是[Element].

創造一個空的數組

   var someInts = [Int](),如果更具已有的內容推斷出someInts爲int數組,我們還可以直接用 someInts = []來設置空數組

創造帶初始值的數組

  varthreeDoubles =Array(repeating:0.0,count:3)repeating這個參數爲初始值,數組更具這個值來推斷類型,count爲初始值重複的次數。

創造一個數組通過合併兩個數組

  var anotherThreeDoubles = Array(repeating: 2.5, count: 3)
 // anotherThreeDoubles is of type [Double], and equals [2.5, 2.5, 2.5]
 
 var sixDoubles = threeDoubles + anotherThreeDoubles
 // sixDoubles is inferred as [Double], and equals [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]

創造一個數組的簡易語法

 [value 1,value 2, value 3]

 var shoppingList = ["Eggs","Milk"]

訪問和修改數組

 count屬性:返回數組裏的元素數量

 isEmpty屬性

 append方法:添加元素

 +=操作符:合併其他數組

 [index]:訪問數組元素,[index1...index2]語法可以替換一定範圍內的值,

  如:shoppingList[4...6] = ["Bananas","Apples"]要注意的是選中範圍內的被替換元素數量不一定

  等於替換的。

 insert(_:at:)方法:如:shoppingList.insert("Maple Syrup", at:0)

 remove(at:)方法:這個方法有返回值,返回值爲移出的元素。

 removeLast()方法:


遍歷一個數組

 方法一:

        for item in shoppingList {
        print(item)
       }

 方法二:

       如果你想要在得到值的同時,獲取到該元素的下標,你應該用數組的enumerated()方法,該方法返回值與下標組成的元組。

       for (index, value) in shoppingList.enumerated() {
       print("Item \(index + 1): \(value)")
     }

 

Sets(注意Sets裏的元素必須是可Hash的)

  設置集合類型:

    Set<Element>

  Sets元素的Hash值

   放在Sets裏的類型,必須是可Hash的,一個Hash值是一個int類型,String, Int, Double, and Bool都是

   可Hash的


  創造和初始化一個空的Set

     varletters = Set<Character>()

果一個var類型的 Set已經確定了所存儲的類型,可以通過 letters = []設置一個空的 Set。

用數組初始化一個 Set

varfavoriteGenres:Set<String> = ["Rock","Classical","Hip hop"]或者

  1. varfavoriteGenres= ["Rock","Classical","Hip hop"]
  2. 訪問和修改一個 Set
  3. count 屬性:
  4. isEmpty 屬性:
  5. insert()方法:favoriteGenres.insert("Jazz")
  6. remove(_:)方法:注意 remove()方法有返回值,如果移除的元素不存在,則返回 nil;
  1. ifletremovedGenre = favoriteGenres.remove("Rock") {
  2. print("\(removedGenre)? I'm over it.")
  3. }else {
  4. print("I never much cared for that.")
  5. }
  6. // Prints "Rock? I'm over it."

   contains(_:) 方法:檢驗 Set 是否包含某元素

   遍歷 Set 方法:

             1)  

  1. forgenrein favoriteGenres {
  2. print("\(genre)")
  3. }
  4. // Jazz
  5. // Hip hop
  6. // Classical
  7. 2)
  1. forgenrein favoriteGenres.sorted() {
  2. print("\(genre)")
  3. }
  4. // Classical
  5. // Hip hop
  6. // Jazz

         Set的sorted()方法,返回一個安 set 中元素從小到大排列的數組。

  集合操作

     intersection(_:) :返回一個新集合,這個新集合是兩個集合的交集

           symmetricDifference(_:) :返回兩個集合交集的補集

           union(_:):返回兩個集合的並集。

           subtracting(_:):返回一個集合減去兩個集合的並集。

     ==:判斷兩個集合的內容是否完全相同

     isSubset(of:):判斷某個集合是否爲另一個集合的子集。

     isSuperset(of:):判斷某個集合是否爲另一個集合的父集

     isStrictSubset(of:) or isStrictSuperset(of:) :判斷是否包含但不相同。

          isDisjoint(with:):判斷兩個集合是否有相同值


 

Dictionaries

       設置字典類型:
      Dictionary<Key, Value> 或者  [key:value]其中key 必須是可hash的

       創造一個空字典
         varnamesOfIntegers = [Int:String]()
如果已經知道了namesOfIntegers爲字典類型以及 key 和 value的類型直接可以:namesOfIntegers=[]
聲明一個數組的簡易方法:
  1. varairports: [String:String] = ["YYZ":"Toronto Pearson", "DUB": "Dublin"]或者
  1. varairports = ["YYZ":"Toronto Pearson", "DUB": "Dublin"]

  訪問和修改字典:

    count 屬性:

    isEmpty 屬性:

    增加和修改: dictionary[key] = value 如果字典裏沒有這個 key 會自動添加,有的話爲修改key 下的                值.或者用 updateValue(_:forkey:)方法,和上面唯一的區別是這個方法返回一個可選值,                如果 key存在,返回更改前的值,如果 key 不存在返回 nil。

    移除:   

               dictionary[key] = nil 或者 removeValue(forKey:)這個方法同 updateValue()一樣都有返回值。

      

     遍歷一個字典:

                

  1. for (airportCode,airportName)in airports {
  2. print("\(airportCode):\(airportName)")

  3. }
  4. forairportCodeinairports.keys {

  1. print("Airport code: \(airportCode)")
  2. }
  3. // Airport code: YYZ
  4. // Airport code: LHR
  5. forairportNamein airports.values {
  6. print("Airport name: \(airportName)")
  7. }
  8. // Airport name: Toronto Pearson
  9. // Airport name: London Heathrow

  10. letairportCodes = [String](airports.keys)
  11. // airportCodes is ["YYZ", "LHR"]
  12. letairportNames = [String](airports.values)
  13. // airportNames is ["Toronto Pearson", "London Heathrow"]


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章