C 程式設計(五十二) 有序列表

2021-09-08 12:33:32 字數 3100 閱讀 6815

有序列表

如果需要基於對所有集合排序,就可以使用sortedlist類.這個類按照鍵給元素排序.這個集合中的值和鍵都可以使用任意型別.

下面的例子建立了乙個有序列表,其中鍵和值型別都是string.預設的建構函式建立了乙個空列表,再用add()方法新增書.使用過載的建構函式.可以定義列表的容量,傳遞實現了icomparer介面的物件,該介面用於給列表中的元素排序.

使用add(tkey,tvalue)方法,第乙個引數是鍵,第二個引數是值.除了使用add()方法之外,還可以使用索引器新增元素到列表中.索引器需要把鍵作為索引引數.如果鍵已存在,add()方法就丟擲乙個argumentexception型別的異常.如果所引起使用相同的鍵,就用新值代替舊值.

sortedlist類只允許每個鍵有乙個對應的值,如果需要每個鍵對應多個之,可以使用lookup類.

案例:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace 有序列表

class program

static void main(string args)

//如果要用排好順序的表,可以使用sortedlist來給元素排序

sortedlistbooks = new sortedlist();

books.add("tangseng", "001");

books.add("sunwukong", "002");

books.add("zhubajie", "003");

books.add("shaheshang", "004");

//鍵是不允許重複,下面我們用add方法重新新增一次tangseng

"tangseng","hahah");丟擲異常

//但是如果使用索引來賦值,如果鍵存在,則覆蓋,不存在,相當於使用add方法

books["tangseng"] = "hahaha";

foreach (var item in books.keys)

console.writeline(item);

foreach (var item in books.values)

console.writeline(item);

//一次性遍歷鍵值

foreach (keyvaluepairitem in books)

console.writeline("名字:  , 序號 : ", item.key, item.value);

* 分析結果可知,tangseng被替換成了hahaha

* 下面簡單介紹一下sortedlist中的方法與屬性

* capacity 這個屬性用來設定與得到有序列表的容量,與ilist一樣,也時成倍增長的

* comparer 返回與有序列表相關的比較器,可以從建構函式中傳入該比較器

* remove() removeat() 按鍵刪除與按索引刪除

* containskey();containsvalue;檢查是不是有包含指定值的鍵,或者值

* trygetvalue() 嘗試獲得指定鍵的值,如果有就是true,並用out把值帶回來,沒有就是false                          

//按鍵刪除

console.writeline("按鍵刪除");

books.remove("tangseng");

foreach (keyvaluepairitem in books)

console.writeline("名字 : , 序號 : ", item.key, item.value);

//可以看出tangseng被刪除了

//下面我們按索引刪除

books.removeat(0);

console.writeline("按索引刪除");

foreach (keyvaluepairitem in books)

console.writeline("名字 : , 序號 : ", item.key, item.value);

//結果中看出shaheshang被刪除,證明刪除索引是以排序後的順序為準,不是以插入的順序為準

//檢查是否包含tangseng,檢查是否包含zhubajie(鍵)

console.writeline("檢查是否包含tangseng: ", books.containskey("tangseng"));

console.writeline("檢查是否包含zhubajie: ", books.containskey("zhubajie"));

//檢查是否包含001,檢查是否包含002(值)

console.writeline("是否包含001: ", books.containsvalue("001"));

console.writeline("是否包含002: ", books.containsvalue("002"));

//此處的索引值是按排序後的順序

int keyindex = books.indexofkey("zhubajie");

console.writeline("zhubajie的索引值: ", keyindex);

string value = "";

if (books.trygetvalue("tangseng",out value))

console.writeline("得到了tangseng的值 : ",value);

string value2 = "";

if (books.trygetvalue("zhubajie", out value2))

console.writeline("得到了zhubajie的值 : ", value2);

console.readkey();

分析:使用values和keys屬性訪問值和鍵.如果嘗試使用索引器訪問乙個元素,但所傳遞的鍵不存在,就會丟擲異常.為了避免一場,可以使用containskey()方法,如果所傳遞的鍵存在於集合中,這個方法返回true,也可以呼叫trygetvalue()方法,該方法嘗試獲得指定鍵的值.如果指定鍵對應的值不存在,該方法就會丟擲異常.

C 入門教程(五十二) 靜態陣列

小古銀的官方 完整教程 多維陣列 靜態陣列就是使用棧記憶體的陣列,一般簡稱陣列。以下是陣列的建立和簡單使用 include std cout std endl int main void 跟上面一樣,賦值符號可省略 int arr2 10 建立具有10個元素的陣列,前三個分別初始化為1,2,3,剩餘...

有序列表 無序列表 巢狀列表

無序列表 有序列表 coffee teamilk coffee teamilk 不同型別的有序列表 編號列表 bananas lemons oranges 大寫字母列表 bananas lemons oranges 小寫字母列表 bananas lemons oranges 羅馬數字列表 banan...

HTML無序列表 有序列表 定義列表

一 無序列表 ordered list 各個列表專案之間沒有順序,是並列的 type屬性用於設定列表樣式,預設是小圓點 disc circle空心圓圈 square小方塊 通過list style none可以取消 二 有序列表 ordered list type 預設是1,表示專案列表用數字1,2...