(六)陣列,集合,字典的比較

2021-08-21 02:30:16 字數 2548 閱讀 6594

首先,我們可以將這三個都看成是儲存物體的容器,事實上本質也確實是容器
c#中陣列、集合(arraylist)、泛型集合list、字典(dictionary)全面對比

為什麼把這4個東西放在一起來說,因為c#中的這4個物件都是用來儲存資料的集合……。

首先咱們把這4個物件都宣告並例項化一下:

//陣列

string m_str = new string[5];

//集合

arraylist m_alist = new arraylist();

//泛型集合

listm_list = new list();

//字典

dictionarym_dt = new dictionary();

大家看看這4個物件放在一起從外觀上有什麼異同?

我給大家提個醒,看看他們是不是都有new關鍵字,也就是說他們都需要例項化,在說明白點他們都是引用型別(不知道引用型別為何物的也不用特別糾結,以後會專門說說這個區別)。

好了咱們繼續看

//陣列

string m_str = new string[5];

m_str[0] = "a";

m_str[1] = "a";

m_str[2] = "a";

1、宣告陣列時裡面有乙個數字「5」,對了這就是區別,陣列在宣告的時候必須要指定長度。這是因為陣列在記憶體中是連續儲存的,所以它的索引速度非常快,而且賦值與修改元素也很簡單。還有一點就是陣列在宣告定義的時候就指定了型別,我們定義的陣列的型別是string的,而且因為陣列是連續的,這就導致我們想在這個陣列的第乙個元素和第二個元素之間插隊,插進乙個成員是很不方便的。這就導致了我們需要乙個資料集合,這個集合可以方便的讓我們對該集合的成員進行add/delete/insert的操作.這就出現了集合(arraylist)。

2、咱們看第2個物件集合(arraylist),它在宣告的時候既沒有大小,也沒有型別,這說明啥?說明他的大小是動態的你可以隨意的add/delete/insert 如:

//集合

arraylist m_alist = new arraylist();

m_alist.add("a");

m_alist.add(10);

m_alist.add(true);

m_alist.removeat(0);

m_alist.insert(1, "aa");

大家可能注意到集合arraylist中add的成員有字串、數值、布林值。這就說明了乙個問題,集合中的每乙個成員都是object型別的,它把具體的成員裝箱到object中在加入到自己。如果要是使用集合中的成員,因為成員是object型別的,所以也要拆箱到具體的型別中後再進行操作和使用。這樣就會出現問題:1、消耗效能(頻繁的拆箱和裝箱)2、不安全,比如說上面的集合物件的第乙個成員是字元型的,你取出來後和乙個數值型的變數進行運算,就會報錯……。那麼接下來就又出現了乙個物件——泛型集合(list)物件。

3、泛型集合list物件,大家可能一看見這個就蒙了,反正我一開始看見是蒙了,尖括號是啥,t是啥?別慌,其實不難,尖括號就是一種語法,至於t可以理解成佔位符,它可以是string、int、bool……等。咱們看看**的用法:

//泛型集合

listm_list = new list();

m_list.add(10);

m_list.add(10);

m_list.add(10);

m_list.removeat(0);

m_list.insert(1,12);

看起來好像和集合(arraylist)的用法差不多,其實就是差不多了,哈哈。唯一的區別在於在宣告泛型集合(list)的時候需要制定裡面成員的型別,上面的反省集合我們制定的型別是int的,這就是說你新增的成員必須也是int的,這會有啥好處?1.資料安全了,你新增string等非int型別的成員新增不進去(編譯都過不去),這樣資料就安全唯一了,2.節省的效能,不需要每一操作成員的時候都要拆箱和裝箱了。

泛型集合相比集合就相對完美了……

4、最後咱們說說字典dictionary,大家一看又蒙了,別慌,想想剛才的泛型集合(list)

一樣的,尖括號還是語法,你遵循就好了。而這一次的佔位符不是t了,「因為第乙個是索引,第二個是具體的值內容,」索引佔位符變成額tkey, tvalue。就這麼簡單呢。

下面咱們看看語法:

//字典

dictionarym_dt = new dictionary();

m_dt.add(0, "a");

m_dt.add(1, "b");

m_dt.add(0, "c");

string str=m_dt[0];

看著用法還是比較簡單的吧,拿m_dt.add(0, "a");這一句來說0是該字典的【索引】,【值】是字串a。要根據字典的【索引】找到具體的【值】,語法就是m_dt[0];這樣就取到了字串a.

大家回憶一下:因為陣列的使用不方便,所以有了集合(arraylist)。因為集合(arraylist)的不安全和消耗效能所以有了泛型集合(list).這就是這3者的關係——彌補缺點。至於字典這個因為它也是儲蓄一組資料的集合,同時用到了泛型的東西,所以放在一起來說了。

Swift 集合字典 六

字典是一種儲存相同型別多重資料的儲存器,每個值都關聯讀的鍵,鍵作為字典中的這個值資料的識別符號.和陣列中的資料項不同,字典中的資料項並沒有具體順序.一.建立字典 varairports dictionary tyo tokyo dub dublin varf varstudents1 diction...

陣列,字典,集合

1.nsstring 初始化方法 nsstring initwithformat d,a,b int a 1000 nsstring str1 nsstring alloc initwithformat zhangsan d a nsstring stringwithformat nsstring ...

集合 陣列,字典

int let numbers 1,2,3,4,5,6,7,8,9,10 for num in numberslet num1 numbers 0 let num2 numbers 1 let array zhangsan lisi 不能向不可變陣列中追加內容 var array1 zhangsan...