C# List常用方法及Dictionary常用方法匯總


本文主要匯總了在開發過程中,使用List和Dictionary常用的方法,例如增、刪、改、查、排序等等各種常用操作。

在平時的開發過程中,List和Dictionary是我們經常使用到的數據結構,而且由於本人記性又差有些方法長時間不用就都忘了,所以總結出此博客,用於記錄和分享一下關於這兩種數據結構的使用方法。

一、List

首先對於這些內容最權威和完整介紹的地方就是微軟的官方文檔,里面全面且詳細的介紹了Lits的所有屬性及方法,經常查看官方文檔是一個非常好的習慣。本文將會總結出在日常開發過程中相對常用的一些方法同時會配上示例。

1.添加方法:

Add(T)---將對象添加到List結尾處。

AddRange(IEnumerable<T>)---將指定集合的元素添加到List末尾。

Insert(int32,T)---將元素T插入到List指定索引處。

InsertRange(int32,IEnumerable<T>)---將集合中的元素插入到List的指定索引處。

2.刪除方法:

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;
        }
View Code

通過以上方式可以實現用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

二、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> 是否包含特定值。

 

共同提高,歡迎指正,交流。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM