1. 程式人生 > 其它 >C# List集合類常用操作

C# List集合類常用操作

C# List集合類常用操作 (一)

所有操作基於以下類

    class Employees
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string City { get; set; }
        public DateTime BirthDate { get; set; }
    }

List()初始化 List 類的新例項,該例項為空並且具有預設初始容量。

List<Employees> employees = new List<Employees>();
employees.Add(new Employees { Id = 1, Name = "Nancy.Davolio", City = "Seattle", BirthDate = Convert.ToDateTime("1948-12-08") });
employees.Add(new Employees { Id = 2, Name = "Andrew.Fuller", City = "Tacoma", BirthDate = Convert.ToDateTime("1952-02-19") });
employees.Add(new Employees { Id = 3, Name = "Janet.Leverling", City = "Kirkland", BirthDate = Convert.ToDateTime("1963-08-30") });
employees.Add(new Employees { Id = 4, Name = "Margaret.Peacock", City = "Redmond", BirthDate = Convert.ToDateTime("1937-09-19") });
employees.Add(new Employees { Id = 5, Name = "Steven.Buchanan", City = "London", BirthDate = Convert.ToDateTime("1955-03-04") });

List(IEnumerable) 初始化 List 類的新例項,該例項包含從指定集合複製的元素並且具有足夠的容量來容納所複製的元素。

List<Employees> employees = new List<Employees>()
{
    new Employees { Id = 1, Name = "Nancy.Davolio", City = "Seattle", BirthDate = Convert.ToDateTime("1948-12-08") },
    new Employees { Id = 2, Name = "Andrew.Fuller", City = "Tacoma", BirthDate = Convert.ToDateTime("1952-02-19") },
    new Employees { Id = 3, Name = "Janet.Leverling", City = "Kirkland", BirthDate = Convert.ToDateTime("1963-08-30") },
    new Employees { Id = 4, Name = "Margaret.Peacock", City = "Redmond", BirthDate = Convert.ToDateTime("1937-09-19") },
    new Employees { Id = 5, Name = "Steven.Buchanan", City = "London", BirthDate = Convert.ToDateTime("1955-03-04") }
}; 
//顯示
Console.WriteLine("Employees Report");
Console.WriteLine("Id Name\t\t\tCity\tBirthDate");
Console.WriteLine("-----------------------------------------");
foreach (var item in employees)
{
    Console.WriteLine("{0}  {1}\t{2}\t{3}", item.Id, item.Name, item.City, item.BirthDate);
}

List(Int32) 初始化 List 類的新例項,該例項為空並且具有指定的初始容量

List<Employees> employees = new List<Employees>(2);
employees.Add(new Employees { Id = 0, Name = "Nancy.Davolio", City = "Seattle", BirthDate = Convert.ToDateTime("1948-12-08") });
employees.Add(new Employees { Id = 1, Name = "Andrew.Fuller", City = "Tacoma", BirthDate = Convert.ToDateTime("1952-02-19") });
employees.Add(new Employees { Id = 2, Name = "Janet.Leverling", City = "Kirkland", BirthDate = Convert.ToDateTime("1963-08-30") });
employees.Add(new Employees { Id = 3, Name = "Margaret.Peacock", City = "Redmond", BirthDate = Convert.ToDateTime("1937-09-19") });
employees.Add(new Employees { Id = 4, Name = "Steven.Buchanan", City = "London", BirthDate = Convert.ToDateTime("1955-03-04") });
Console.WriteLine("Capacity:" + employees.Capacity);  //Capacity:8
Console.WriteLine("Count:" + employees.Count);        //Count:5
//Capacity 列表之前設定的容量值,每超過容量值在此前基礎上*2,故0-1=2,2-3=4,4=8,可以通過呼叫TrimExcess方法或通過顯式設定Capacity屬性來減少多餘容量
//Count 實際的元素個數 

元素操作

List<Employees> employees = new List<Employees>(5);
employees.Add(new Employees { Id = 0, Name = "Nancy.Davolio", City = "Seattle", BirthDate = Convert.ToDateTime("1948-12-08") });
employees.Add(new Employees { Id = 1, Name = "Andrew.Fuller", City = "Tacoma", BirthDate = Convert.ToDateTime("1952-02-19") });
employees.Add(new Employees { Id = 2, Name = "Janet.Leverling", City = "Kirkland", BirthDate = Convert.ToDateTime("1963-08-30") });
employees.Add(new Employees { Id = 3, Name = "Margaret.Peacock", City = "Redmond", BirthDate = Convert.ToDateTime("1937-09-19") });
employees.Add(new Employees { Id = 4, Name = "Steven.Buchanan", City = "London", BirthDate = Convert.ToDateTime("1955-03-04") });
Console.WriteLine("初始屬性");
Console.WriteLine("Capacity:" + employees.Capacity); 
Console.WriteLine("Count:" + employees.Count);
Console.WriteLine();

Console.WriteLine("新增一條資料");
employees.Add(new Employees { Id = 5, Name = "Michael.Suyama", City = "London", BirthDate = Convert.ToDateTime("1963-07-02") });
Console.WriteLine("Capacity:" + employees.Capacity);
Console.WriteLine("Count:" + employees.Count);
Console.WriteLine();

Console.WriteLine("清除多佔用元素總數");
employees.TrimExcess();
Console.WriteLine("Capacity:" + employees.Capacity);
Console.WriteLine("Count:" + employees.Count);

List集合類常用操作:二、增加

所有操作基於以下類

class Employees
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string City { get; set; }
    public DateTime BirthDate { get; set; }
}

Add(T) 將物件新增到 List 的結尾處。

List<Employees> employees = new List<Employees>();
employees.Add(new Employees { Id = 0, Name = "Nancy.Davolio", City = "Seattle", BirthDate = Convert.ToDateTime("1948-12-08") });
employees.Add(new Employees { Id = 1, Name = "Andrew.Fuller", City = "Tacoma", BirthDate = Convert.ToDateTime("1952-02-19") });
employees.Add(new Employees { Id = 2, Name = "Janet.Leverling", City = "Kirkland", BirthDate = Convert.ToDateTime("1963-08-30") });
employees.Add(new Employees { Id = 3, Name = "Margaret.Peacock", City = "Redmond", BirthDate = Convert.ToDateTime("1937-09-19") });
employees.Add(new Employees { Id = 4, Name = "Steven.Buchanan", City = "London", BirthDate = Convert.ToDateTime("1955-03-04") });

AddRange(IEnumerable)將指定集合的元素新增到 List 的末尾。

Employees[] employees =
{
    new Employees { Id = 0, Name = "Nancy.Davolio", City = "Seattle", BirthDate = Convert.ToDateTime("1948-12-08") },
    new Employees { Id = 1, Name = "Andrew.Fuller", City = "Tacoma", BirthDate = Convert.ToDateTime("1952-02-19") },
    new Employees { Id = 2, Name = "Janet.Leverling", City = "Kirkland", BirthDate = Convert.ToDateTime("1963-08-30") },
    new Employees { Id = 3, Name = "Margaret.Peacock", City = "Redmond", BirthDate = Convert.ToDateTime("1937-09-19") },
    new Employees { Id = 4, Name = "Steven.Buchanan", City = "London", BirthDate = Convert.ToDateTime("1955-03-04") }
};
List<Employees> emp = new List<Employees>();
emp.AddRange(employees);

Insert(Int32, T) 將元素插入 List 的指定索引處。

 List<Employees> employees = new List<Employees>();
 employees.Add(new Employees { Id = 1, Name = "Nancy.Davolio", City = "Seattle", BirthDate = Convert.ToDateTime("1948-12-08") });
 employees.Add(new Employees { Id = 2, Name = "Andrew.Fuller", City = "Tacoma", BirthDate = Convert.ToDateTime("1952-02-19") });
 Employees[] emp =
 {
     new Employees { Id = 3, Name = "Janet.Leverling", City = "Kirkland", BirthDate = Convert.ToDateTime("1963-08-30") },
     new Employees { Id = 4, Name = "Margaret.Peacock", City = "Redmond", BirthDate = Convert.ToDateTime("1937-09-19") },
     new Employees { Id = 5, Name = "Steven.Buchanan", City = "London", BirthDate = Convert.ToDateTime("1955-03-04") }
 };
 employees.InsertRange(2,emp);

InsertRange(Int32, IEnumerable) 將集合中的元素插入 List 的指定索引處。

 List<Employees> employees = new List<Employees>();
 employees.Add(new Employees { Id = 1, Name = "Nancy.Davolio", City = "Seattle", BirthDate = Convert.ToDateTime("1948-12-08") });
 employees.Add(new Employees { Id = 2, Name = "Andrew.Fuller", City = "Tacoma", BirthDate = Convert.ToDateTime("1952-02-19") });
 Employees[] emp =
 {
     new Employees { Id = 3, Name = "Janet.Leverling", City = "Kirkland", BirthDate = Convert.ToDateTime("1963-08-30") },
     new Employees { Id = 4, Name = "Margaret.Peacock", City = "Redmond", BirthDate = Convert.ToDateTime("1937-09-19") },
     new Employees { Id = 5, Name = "Steven.Buchanan", City = "London", BirthDate = Convert.ToDateTime("1955-03-04") }
 };
 employees.InsertRange(2,emp);

List在C#中只有修改例項的void Add(T item)方法將單個項新增到列表中。

IEnumarable Append(this IEnumerable source, T element)另一方面,是在IEnumerable介面上定義的擴充套件方法(由所有列表實現)。它不會修改原始列表例項,但會返回一個新的列舉,它將在序列的末尾生成指定的元素。

Append(IEnumerable, TSource) 將一個值追加到序列末尾。

List<Employees> employees = new List<Employees>();
employees.Add(new Employees { Id = 1, Name = "Nancy.Davolio", City = "Seattle", BirthDate = Convert.ToDateTime("1948-12-08") });
employees.Add(new Employees { Id = 2, Name = "Andrew.Fuller", City = "Tacoma", BirthDate = Convert.ToDateTime("1952-02-19") });
employees = employees.Append(new Employees { Id = 3, Name = "Janet.Leverling", City = "Kirkland", BirthDate = Convert.ToDateTime("1963-08-30") }).ToList();

Prepend(IEnumerable, TSource) 向序列的開頭新增值。

List<Employees> employees = new List<Employees>();
employees.Add(new Employees { Id = 1, Name = "Nancy.Davolio", City = "Seattle", BirthDate = Convert.ToDateTime("1948-12-08") });
employees.Add(new Employees { Id = 2, Name = "Andrew.Fuller", City = "Tacoma", BirthDate = Convert.ToDateTime("1952-02-19") });
employees = employees.Prepend(new Employees { Id = 3, Name = "Janet.Leverling", City = "Kirkland", BirthDate = Convert.ToDateTime("1963-08-30") }).ToList();

輸出

//Id Name      City   BirthDate
//---------------------------------------------
//3 Janet.Leverling Kirkland 1963/8/30 0:00:00
//1 Nancy.Davolio  Seattle 1948/12/ 8 0:00:00
//2 Andrew.Fuller  Tacoma  1952/2/ 19 0:00:00 

List集合類常用操作:三、查詢

List集合查詢資料

List<Employees> employees = new List<Employees>();
employees.Add(new Employees { Id = 1, Name = "Nancy.Davolio", City = "Seattle", BirthDate = Convert.ToDateTime("1948-12-08") });
employees.Add(new Employees { Id = 2, Name = "Andrew.Fuller", City = "Tacoma", BirthDate = Convert.ToDateTime("1952-02-19") });
employees.Add(new Employees { Id = 3, Name = "Janet.Leverling", City = "Kirkland", BirthDate = Convert.ToDateTime("1963-08-30") });
employees.Add(new Employees { Id = 4, Name = "Margaret.Peacock", City = "Redmond", BirthDate = Convert.ToDateTime("1937-09-19") });
employees.Add(new Employees { Id = 5, Name = "Steven.Buchanan", City = "London", BirthDate = Convert.ToDateTime("1955-03-04") });

All(IEnumerable, Func<TSource,Boolean>)確定序列中的所有元素是否都滿足條件。

Any(IEnumerable) 確定序列是否包含任何元素。

//表示集合中的任一個元素滿足表示式條件,即返回true。
var res1 = employees.Any(e => e.Id == 3 || e.Id == 8);
Console.WriteLine(res1);  //out:True

var res2 = employees.Any(e => e.Id == 3 && e.Name == "Steven");
Console.WriteLine(res2);  //out:False  資料來源Name中沒有Steven

Contains(T) 確定某元素是否在 List 中。

Equals(Object) 確定指定的物件是否等於當前物件。(繼承自 Object)

Exists(Predicate) 確定 List 是否包含與指定謂詞定義的條件匹配的元素。

Find(Predicate) 搜尋與指定謂詞所定義的條件相匹配的元素,並返回整個 List 中的第一個匹配元素。

List<Employees> employees = new List<Employees>();
employees.Add(new Employees { Id = 1, Name = "Nancy.Davolio", City = "Seattle", BirthDate = Convert.ToDateTime("1948-12-08") });
employees.Add(new Employees { Id = 2, Name = "Andrew.Fuller", City = "Tacoma", BirthDate = Convert.ToDateTime("1952-02-19") });
employees.Add(new Employees { Id = 3, Name = "Janet.Leverling", City = "Kirkland", BirthDate = Convert.ToDateTime("1963-08-30") });
employees.Add(new Employees { Id = 4, Name = "Margaret.Peacock", City = "Redmond", BirthDate = Convert.ToDateTime("1937-09-19") });
employees.Add(new Employees { Id = 5, Name = "Steven.Buchanan", City = "London", BirthDate = Convert.ToDateTime("1955-03-04") });

//如果找到與指定謂詞定義的條件匹配的第一個元素,則為該元素;
var emp = employees.Find(e => e.Id == 5);
Console.WriteLine(emp.Id);          //5
Console.WriteLine(emp.Name);        //Steven.Buchanan
Console.WriteLine(emp.City);        //London
Console.WriteLine(emp.BirthDate);   //1955-03-04

FindAll(Predicate) 檢索與指定謂詞定義的條件匹配的所有元素。

List<Employees> employees = new List<Employees>();
employees.Add(new Employees { Id = 1, Name = "Nancy.Davolio", City = "Seattle", BirthDate = Convert.ToDateTime("1948-12-08") });
employees.Add(new Employees { Id = 2, Name = "Andrew.Fuller", City = "Tacoma", BirthDate = Convert.ToDateTime("1952-02-19") });
employees.Add(new Employees { Id = 3, Name = "Janet.Leverling", City = "Kirkland", BirthDate = Convert.ToDateTime("1963-08-30") });
employees.Add(new Employees { Id = 4, Name = "Margaret.Peacock", City = "Redmond", BirthDate = Convert.ToDateTime("1937-09-19") });
employees.Add(new Employees { Id = 5, Name = "Steven.Buchanan", City = "London", BirthDate = Convert.ToDateTime("1955-03-04") });

//如果找到一個 List<T>,其中所有元素均與指定謂詞定義的條件匹配,則為該陣列;否則為一個空
var emp = employees.FindAll(e => e.Id >=3);//遍歷訪問
foreach (var item in emp)
{
    Console.WriteLine(item.Id);          
    Console.WriteLine(item.Name);        
    Console.WriteLine(item.City);        
    Console.WriteLine(item.BirthDate);   
}

FindIndex(Predicate) 搜尋與指定謂詞所定義的條件相匹配的元素,並返回整個 List 中第一個匹配元素的從零開始的索引。

List<Employees> employees = new List<Employees>();
employees.Add(new Employees { Id = 1, Name = "Nancy.Davolio", City = "Seattle", BirthDate = Convert.ToDateTime("1948-12-08") });
employees.Add(new Employees { Id = 2, Name = "Andrew.Fuller", City = "Tacoma", BirthDate = Convert.ToDateTime("1952-02-19") });
employees.Add(new Employees { Id = 3, Name = "Janet.Leverling", City = "Kirkland", BirthDate = Convert.ToDateTime("1963-08-30") });
employees.Add(new Employees { Id = 4, Name = "Margaret.Peacock", City = "Redmond", BirthDate = Convert.ToDateTime("1937-09-19") });
employees.Add(new Employees { Id = 5, Name = "Steven.Buchanan", City = "London", BirthDate = Convert.ToDateTime("1955-03-04") });

//如果找到與 match 定義的條件相匹配的第一個元素,則為該元素的從零開始的索引;否則為 -1
var emp = employees.FindIndex(e => e.Id ==3);
Console.WriteLine("查到的索引為:" + emp);  //2

FindLast(Predicate) 搜尋與指定謂詞所定義的條件相匹配的元素,並返回整個 List 中的最後一個匹配元素。

使用方式同FindIndex

IndexOf(T) 搜尋指定的物件,並返回整個 List 中第一個匹配項的從零開始的索引

LastIndexOf(T) 搜尋指定物件並返回整個 List 中最後一個匹配項的從零開始索引。

List集合類常用操作:四、刪除

Clear() 從 List 中移除所有元素。

List<Employees> employees = new List<Employees>();
employees.Add(new Employees { Id = 1, Name = "Nancy.Davolio", City = "Seattle", BirthDate = Convert.ToDateTime("1948-12-08") });
employees.Add(new Employees { Id = 2, Name = "Andrew.Fuller", City = "Tacoma", BirthDate = Convert.ToDateTime("1952-02-19") });
employees.Add(new Employees { Id = 3, Name = "Janet.Leverling", City = "Kirkland", BirthDate = Convert.ToDateTime("1963-08-30") });
employees.Add(new Employees { Id = 4, Name = "Margaret.Peacock", City = "Redmond", BirthDate = Convert.ToDateTime("1937-09-19") });
employees.Add(new Employees { Id = 5, Name = "Steven.Buchanan", City = "London", BirthDate = Convert.ToDateTime("1955-03-04") });
Console.WriteLine("Clear清空前" + employees.Count + " " + employees.Capacity);  //Count=5  Capacity = 8
employees.Clear(); //Count=0 
employees.TrimExcess(); //Capacity = 0 
Console.WriteLine("Clear清空後" + employees.Count + " " + employees.Capacity);

Remove(T) 從 List 中移除特定物件的第一個匹配項。

List<Employees> employees = new List<Employees>();
employees.Add(new Employees { Id = 1, Name = "Nancy.Davolio", City = "Seattle", BirthDate = Convert.ToDateTime("1948-12-08") });
employees.Add(new Employees { Id = 2, Name = "Andrew.Fuller", City = "Tacoma", BirthDate = Convert.ToDateTime("1952-02-19") });
employees.Add(new Employees { Id = 3, Name = "Janet.Leverling", City = "Kirkland", BirthDate = Convert.ToDateTime("1963-08-30") });
employees.Add(new Employees { Id = 4, Name = "Margaret.Peacock", City = "Redmond", BirthDate = Convert.ToDateTime("1937-09-19") });
employees.Add(new Employees { Id = 5, Name = "Steven.Buchanan", City = "London", BirthDate = Convert.ToDateTime("1955-03-04") });
Console.WriteLine("Remove前" + employees.Count);      //Count = 5      

var emp = employees.FirstOrDefault(e => e.Id == 5);

//如果成功移除了 true,則為 item;否則為 false。 如果在 false 中沒有找到 item,則此方法也會返回 List<T>。
if (employees.Remove(emp))
{
    Console.WriteLine("Remove後" + employees.Count);  //Count = 4  
}

RemoveAll(Predicate) 刪除與指定謂詞所定義的條件匹配的所有元素。

List<Employees> employees = new List<Employees>();
employees.Add(new Employees { Id = 1, Name = "Nancy.Davolio", City = "Seattle", BirthDate = Convert.ToDateTime("1948-12-08") });
employees.Add(new Employees { Id = 2, Name = "Andrew.Fuller", City = "Tacoma", BirthDate = Convert.ToDateTime("1952-02-19") });
employees.Add(new Employees { Id = 3, Name = "Janet.Leverling", City = "Kirkland", BirthDate = Convert.ToDateTime("1963-08-30") });
employees.Add(new Employees { Id = 4, Name = "Margaret.Peacock", City = "Redmond", BirthDate = Convert.ToDateTime("1937-09-19") });
employees.Add(new Employees { Id = 5, Name = "Steven.Buchanan", City = "London", BirthDate = Convert.ToDateTime("1955-03-04") });
Console.WriteLine("RemoveAll前" + employees.Count);      //Count = 5      

//遍歷list中的元素,將符合lambda表示式結果的元素全部刪除掉,返回結果是刪除掉的元素個數。
Console.WriteLine("RemoveAll後共刪除了" + employees.RemoveAll(e => e.Id >= 3) + "條資料");  //RemoveAll後共刪除了3條資料

RemoveAt(Int32) 移除 List 的指定索引處的元素。

List<Employees> employees = new List<Employees>();
employees.Add(new Employees { Id = 1, Name = "Nancy.Davolio", City = "Seattle", BirthDate = Convert.ToDateTime("1948-12-08") });
employees.Add(new Employees { Id = 2, Name = "Andrew.Fuller", City = "Tacoma", BirthDate = Convert.ToDateTime("1952-02-19") });
employees.Add(new Employees { Id = 3, Name = "Janet.Leverling", City = "Kirkland", BirthDate = Convert.ToDateTime("1963-08-30") });
employees.Add(new Employees { Id = 4, Name = "Margaret.Peacock", City = "Redmond", BirthDate = Convert.ToDateTime("1937-09-19") });
employees.Add(new Employees { Id = 5, Name = "Steven.Buchanan", City = "London", BirthDate = Convert.ToDateTime("1955-03-04") });
Console.WriteLine("Remove前" + employees.Count);      //Count = 5      

//根據下標刪除待刪除元素的從零開始的索引。
employees.RemoveAt(4);     //Count = 4 

//查詢刪除
var index = employees.FindIndex(e => e.Id == 5);
employees.RemoveAt(index);
Console.WriteLine("Remove後" + employees.Count);  //Count = 4  

RemoveRange(Int32, Int32) 從 List 中移除一系列元素。

index Int32 要移除的元素範圍的從零開始的起始索引。

count Int32 要移除的元素數。

List<Employees> employees = new List<Employees>();
employees.Add(new Employees { Id = 1, Name = "Nancy.Davolio", City = "Seattle", BirthDate = Convert.ToDateTime("1948-12-08") });
employees.Add(new Employees { Id = 2, Name = "Andrew.Fuller", City = "Tacoma", BirthDate = Convert.ToDateTime("1952-02-19") });
employees.Add(new Employees { Id = 3, Name = "Janet.Leverling", City = "Kirkland", BirthDate = Convert.ToDateTime("1963-08-30") });
employees.Add(new Employees { Id = 4, Name = "Margaret.Peacock", City = "Redmond", BirthDate = Convert.ToDateTime("1937-09-19") });
employees.Add(new Employees { Id = 5, Name = "Steven.Buchanan", City = "London", BirthDate = Convert.ToDateTime("1955-03-04") });
Console.WriteLine("RemoveRange前" + employees.Count); //Count = 5 

//根據索引,刪除指定條數元素 
var index = employees.FindIndex(e => e.Id == 1); 
employees.RemoveRange(index,3); 
Console.WriteLine("RemoveRange後" + employees.Count); //Count = 2 

//網路素材僅限收藏 方便學習