Swift學習筆記數組與字典

來源:互聯網
上載者:User

標籤:

swift中數組和字典都是以結構體的形式實現的。

首先,這個很奇葩,我不知道為什麼這樣設計,這樣是出於一個什麼樣的考慮。

在C#中使用字典:

            Dictionary<int, string> dic = new Dictionary<int, string>();            Dictionary<int, string> dic1 = dic;            dic.Add(1,"123");            dic1[1]="456";            Console.WriteLine(dic[1]);

在C#中,這種代碼我閉著眼睛也看出來這是等於456的,可swift中:

var dic:Dictionary<Int,String> = [1:"123"]var dic1 = dicdic1[1] = "456"println(dic[1]!)

這輸出的結果是123,你敢信?這奇葩的字典居然是實值型別的

將var改成let:

let dic:Dictionary<Int,String> = [1:"123"]let dic1 = dicdic1[1] = "456"println(dic[1]!)

編譯報錯,我ca,居然是實值型別的。我不知道為什麼字典要使實值型別的,這意味著我1個方法裡面傳遞一個字典居然是拷貝過去的。

這樣我豈不是在函數裡傳遞字典的時候都要考慮inout關鍵字如下:

func setDic(inout dic:Dictionary<Int,String>){    dic[2] = "789"}var dic:Dictionary<Int,String> = [1:"123"]setDic(&dic)println(dic[2]!)

我也是醉了,不知道為什麼字典要使用結構類型去設計,Scala中可變的hashMap也是使用參考型別設計的

val dic : scala.collection.mutable.HashMap[Int,String] = scala.collection.mutable.HashMap.empty[Int,String]dic += (3→"3")val dicCopy = dicdicCopy += (4→"4")println(dic)

不知道swift是出於什麼樣的考慮,將字典設計成一個實值型別,難道是出於效能考慮?

在看看swift的數組,swift數組,在新的xCode版本中有了很大的變化,原來的那數組我就不吐槽了,使用的時候

你根本沒有辦法區分他是參考型別還是實值型別,現在統一的改為實值型別,將一個數組賦值給另外一個的時候,都是拷貝,原來是在有些情況下是拷貝,有些情況不拷貝:

var a = [1,2,3]var b = avar c = aprintln(a[0])println(b[0])println(c[0])a[0] = 42println(a[0])println(b[0])println(c[0])a.insert(777, atIndex: 0)println(a[0])println(b[0])println(c[0])

現在的數組已經是改了,實值型別,修改一個下標不影響另外一個。原來使用恒等號判斷,現在也改成了==號

if(b[1...2] == a[2...3]){    println("true")}if(b == c ){    println("true")}

不過這樣設計肯定是有設計者的考慮,而且使用llvm的編譯架構與lvm的編譯架構有什麼區別,這些都不太清楚

對於中間代碼的最佳化也不太清楚,也許使用實值型別,效能上更加高吧,也許是效能上的考慮。

在書上說,數組拷貝接近於C語言的效能。

 

Swift學習筆記數組與字典

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.