本文主要彙總了在開發過程當中,使用List和Dictionary經常使用的方法,例如增、刪、改、查、排序等等各類經常使用操做。html
在平時的開發過程當中,List和Dictionary是咱們常常使用到的數據結構,並且因爲本人記性又差有些方法長時間不用就都忘了,因此總結出此博客,用於記錄和分享一下關於這兩種數據結構的使用方法。api
1、List數組
首先對於這些內容最權威和完整介紹的地方就是微軟的官方文檔,裏面全面且詳細的介紹了Lits的全部屬性及方法,常常查看官方文檔是一個很是好的習慣。本文將會總結出在平常開發過程當中相對經常使用的一些方法同時會配上示例。數據結構
1.添加方法:ide
Add(T)---將對象添加到List結尾處。spa
AddRange(IEnumerable<T>)---將指定集合的元素添加到List末尾。code
Insert(int32,T)---將元素T插入到List指定索引處。htm
InsertRange(int32,IEnumerable<T>)---將集合中的元素插入到List的指定索引處。對象
2.刪除方法:blog
Clear()---從List中移除全部元素。
Remove(T)--從List中移除特定對象的第一個匹配項。(請注意值類型與引用類型)
RemoveAll(Preaicate<T>)---移除與指定謂詞所定義的條件相匹配的全部元素。例:
static void Main(string[] args) { List<test> a = new List<test>(); for (int i = 0; i < 10; i++) { a.Add(new test(i, "張先生")); } a.RemoveAll(x => x.ID > 5); } public class test { public test(int a, string b) { ID = a; Name = b; } public int ID { get; set; } public string Name { get; set; } }
結果:刪除掉了ID大於5的所有元素。
RemoveAt(Int32)---移除List的指定索引處的元素。
RemoveRange(Int32,Int32)---從List中移除一系列元素。
3.搜索方法:
對於List的搜索方法建議使用Linq查詢表達式或者Lambda表達式的方式,能夠參考博文:C# LINQ查詢表達式用法對應LAMBDA表達式
IndexOf(T)---搜索指定的對象,並返回整個List中第一個匹配項從零開始的索引。
IndexOf(T,Int32)---搜索指定對象並返回List中指定索引到最後一個元素這部分元素中第一個匹配項的從零開始的索引。
IndexOf(T,Int32,Int32)---搜索指定對象並返回List中從指定索引開始幷包含指定元素的這部分元素中第一個匹配項的從零開始索引。
Find(Preaicate<T>)---搜索與指定謂詞所定義的條件相匹配的元素,並返回整個List中的第一個匹配元素。
FindAll(Preaicate<T>)---搜索與指定謂詞定義的條件匹配的全部元素。
FindIndex(Preaicate<T>)---搜索與指定謂詞所定義的條件相匹配的元素,並返回整個 List<T> 中第一個匹配元素的從零開始的索引。
FindIndex(Int32,Preaicate<T>)---搜索與指定謂詞所定義的條件相匹配的元素,並返回 List<T> 中從指定索引到最後一個元素的元素範圍內第一個匹配項的從零開始的索引。
FindIndex(In32,Int32,Preaicate<T>)---搜索與指定謂詞所定義的條件相匹配的一個元素,並返回 List<T> 中從指定的索引開始、包含指定元素個數的元素範圍內第一個匹配項的從零開始的索引。例:
static void Main(string[] args) { List<test> a = new List<test>(); for (int i = 0; i < 10; i++) { a.Add(new test(i, "張先生")); } int res = a.FindIndex(x => x.ID == 3); Console.WriteLine(res); } public class test { public test(int a, string b) { ID = a; Name = b; } public int ID { get; set; } public string Name { get; set; } }
結果:控制檯打印的結果爲3。
4.修改方法:
對於當前List是支持經過索引的方式進行修改操做的,操做方式相似於數組。
5.排序方法:請參考博文C#LINQ查詢表達式用法對應LAMBDA表達式
Sort()---使用默認比較器對整個 List<T> 中的元素進行排序。
對於List<T>類型的List進行排序,若是想要使用Sort()方法的話,能夠經過匿名委託的方式實現,我的建議實現排序功能使用Linq的方式最好。對於Sort方法能夠進行一下了解。請參考C#裏List.Sort的用法
public MainWindow() { InitializeComponent(); List<test> a = new List<test>(); a.Add(new test() { a = 1, b = "" }); a.Add(new test() { a = 4, b = "" }); a.Add(new test() { a = 2, b = "" }); a.Add(new test() { a = 3, b = "" }); a.Add(new test() { a = 9, b = "" }); a.Add(new test() { a = 7, b = "" }); a.Add(new test() { a = 6, b = "" }); a.Sort((left, right) => { if (left.a > right.a) return 1; else if (left.a == right.a) return 0; else return -1; }); } class test { public int a; public string b; }
經過以上方式能夠實現用Sort方法對List<T>類型進行排序。
6.其它方法:
Exists(Predicate<T>)---肯定 List<T> 是否包含與指定謂詞定義的條件匹配的元素。
Contains(T)---肯定某元素是否在 List<T> 中。
以上兩個方法使用代碼以下:
public MainWindow() { InitializeComponent(); List<test> a = new List<test>(); a.Add(new test() { a = 1, b = "" }); a.Add(new test() { a = 4, b = "" }); var aa = new test() { a = 55, b = "11" }; a.Add(aa); var res1 = a.Exists(x => x.a == 55); var res2 = a.Contains(aa); } class test { public int a; public string b; }
運行結果,res1=true;res2=true
2、Dictionary
介紹最完整詳細的仍然是官方文檔。
1.添加方法
Add(TKey,TValue)---將指定的鍵和值添加到字典中。
TryAdd(Tkey,TValue)---嘗試將指定的鍵和值添加到字典中。
2.刪除方法
Clear()---將全部鍵和值從 Dictionary<TKey,TValue> 中移除。
Remove(TKey)---從 Dictionary<TKey,TValue> 中移除所指定的鍵的值。
Remove(TKey,TVlue)---從 Dictionary<TKey,TValue> 中刪除具備指定鍵的值,並將元素複製到 value
參數。
3.搜索方法
Item[TKey]---獲取或設置與指定的鍵關聯的值。
可使用Where方法實現,代碼以下:
Dictionary<string, int> a = new Dictionary<string, int>(); a.Add("1", 1); a.Add("2", 2); a.Add("3", 3); a.Add("4", 4); var res = a.Where(x => x.Key == "3").ToDictionary(x=>x.Key,y=>y.Value);
運行結果res是字典類型"3",3
4.修改方法
Item[TKey]---獲取或設置與指定的鍵關聯的值。一般使用字典的Key來修改字典的Value
字典類型的Key一旦定義則沒法修改,若是想修改只能刪除從新添加。
5.排序方法
通常字典類型主要是使用Key來進行索引,因此對於字典這種類數據型進行排序是無心義的,因此字典自己也沒有sort方法。
若是非要排序也是能夠實現經過Linq便可實現,代碼以下:
Dictionary<string, int> a = new Dictionary<string, int>(); a.Add("4", 1); a.Add("1", 2); a.Add("3", 3); a.Add("5", 4); var res1 = a.OrderBy(x=>x.Key).ToDictionary(x => x.Key, x => x.Value); var res2 = a.OrderByDescending(x=>x.Key).ToDictionary(x => x.Key, x => x.Value);
運行結果res1和res2分別實現按照字典key的升序排序和降序排序。
6.其它方法
ContainsKey(TKey)---肯定是否 Dictionary<TKey,TValue> 包含指定鍵。
ContainsKey(TValue)---肯定 Dictionary<TKey,TValue> 是否包含特定值。
共同提升,歡迎指正,交流。