c# List 所有操作方法例子
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //Console.ForegroundColor = ConsoleColor.White; //Console.BackgroundColor = ConsoleColor.Red; //Console.Title = "A simple SER"; ////Console.ResetColor(); //Console.WriteLine("44sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss44"); //Console.Title = "A simple SER"; //Console.ForegroundColor = ConsoleColor.Black; //Console.BackgroundColor = ConsoleColor.White; //Console.WriteLine("44yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy44"); ListMethod(); } public static void ListMethod() { List<string> strList = new List<string>() { "Able", "was", "I", "ere", "I", "saw", "Elba" }; List<int> numList = new List<int>() { 45, 3, 33, 66 }; List<Person> persons1 = new List<Person>(); persons1.Add(new Person("张三", "男", 20, 1500)); persons1.Add(new Person("王成", "男", 32, 3200)); persons1.Add(new Person("李丽", "女", 19, 1700)); persons1.Add(new Person("何英", "女", 35, 3600)); persons1.Add(new Person("何英", "女", 18, 1600)); #region Aggregate //var sum = numList.Aggregate((i, j) => i + j); //将list中的元素累加 //var str1 = strList.Aggregate((i, j) => i + " " + j); //将list中的元素累加 ////Aggregate求前100的和 //var list = Enumerable.Range(1, 100); //var result = list.Aggregate((a, b) => (a + b)); //Console.WriteLine(string.Format("1到100的和为{0}", result)); //var invalidFileName = Path.GetInvalidFileNameChars(); //var replaceResult = invalidFileName.Aggregate("study<Aggregate>first", (accmulate, r) => (accmulate.Replace(r, '-'))); //Console.WriteLine(replaceResult); ////numList中的元素是否都大于2 //#endregion //#region All //bool t1 = numList.All<int>(x => x > 2); //输出true //#endregion //#region Any //bool t2 = numList.Any<int>(x => x > 3); //#endregion //#region AsEnumerable //var t3 = numList.AsEnumerable<int>(); //#endregion //#region AsParallel并发 //var t4 = numList.AsParallel().Where(x => x > 1); //foreach (var item in t4) //{ // Console.WriteLine(item); //} //#endregion //#region AsQueryable //var t5 = numList.AsQueryable<int>(); //#endregion //#region AsQueryable和AsEnumerable //// AsQueryable是在数据库中查询再返回数据,AsEnumerable是从数据库读取全部数据再在程序中查询,其效果和ToList相同。 ////总结一下就是用AsQueryable性能会更加优点,但是当需要所有的数据的时候用AsEnumerable更加合适。 //#endregion //#region AsReadOnly转成只读形式 //var t6 = numList.AsReadOnly(); //#endregion //#region Average计算平均值 //double t7 = numList.Average(); //var t8 = numList.Average<int>(x => x); //#endregion //#region BinarySearch 先对元素排序然后进行2分查找 //numList.Sort(); //var t9 = numList.BinarySearch(3); //#endregion //#region Capacity分配的内存 //// 当我们使用List<T> list = new List<T>();实例化一个List对象是,.Net Framework只是在内存中申请了一块内存在存放list对象本身,系统此时并不知道list会有多少item元素。当我们向list添加第一个item时,list会申请能存储4个Item元素的存储空间,此时Capacity是4,但是当我们添加到第五个item时,此时的Capacity就会变成8,也就是当list发现元素的总数大于Capacity数量时,会主动申请并重新分配内存,当我们添加到第九个item时,Capacity不是12而是16,也就是说list每次申请的内存数量都是之前item元素数量两倍。然后将当前所有的item元素系但添加的元素复制到新的内存。 ////大家可以看到,如果list需要添加的元素特别多时,list会不断地申请心内存,复制已有元素和新加元素到新内存,这个过程会产生资源的浪费及性能问题。 ////如果当设置的Capacity值远大于list的实际元素数量时,应使用TrimExcess()方法释放点未使用的内存。 //numList.Add(1); //numList.Add(1); //Console.WriteLine(numList.Capacity); //numList.TrimExcess(); //Console.WriteLine(numList.Capacity); //#endregion //#region Cast<T>()用来将非泛型的序列转换为泛型的序列 ////比如数组取处大于2的数字 //int[] num = new int[] { 21, 2, 4, 5 }; //var t = num.Cast<int>().Where(x => x > 2); //foreach (var item in t) //{ // Console.WriteLine(item); //} //num = t.ToArray();// 新数组 //#endregion //#region 移除所有元素 ////numList.Clear(); //#endregion //#region Concat合并两个列表 //var newlist = numList.Concat(numList).Where(x => x > 4).ToList().Distinct().ToList();//Concat合并两个列表 大于3的元素 最后去除重复数据 //#endregion //#region Contains列表是否包含元素 //var re = numList.Contains(3); //re = numList.Contains<int>(3); //#endregion //#region ConvertAll列表的类型转换 //var itos = numList.ConvertAll<string>(x => x.ToString()); //#endregion //#region CopyTo从目标数组的开头开始,将整个 List<T> 复制到兼容的一维数组。 //int[] array = new int[15]; //numList.CopyTo(array); //foreach (var item in array) //{ // Console.WriteLine(item); //} //#endregion //#region Count元素个数 //var c1 = numList.Count<int>(); //c1 = numList.Count(); //#endregion //#region DefaultIfEmpty如果列表为空设置默认值 //List<int> list2 = new List<int>(); //var list3 = list2.DefaultIfEmpty(34); //list3.ToList().ForEach(x => Console.WriteLine(x.ToString() + "233")); //#endregion //#region ElementAt返回指定索引处的元素 //var n = numList.ElementAt(0); //n = numList.ElementAt<int>(0); //n = numList.ElementAtOrDefault<int>(14); //如果超出索引范围返回默认值0 //#endregion //#region 判断object是否相同包括地址 //List<int> a1 = new List<int>() { 1, 2, 3, 4 }; //List<int> b1 = new List<int>() { 1, 2, 3, 4 }; //var c2 = b1; //var re2 = b1.Equals(c2); //#endregion //#region Except 取差集(A有,B沒有) //List<int> A = new List<int> { 1, 2, 3, 5, 9 }; //List<int> B = new List<int> { 4, 3, 9 }; //var expectedList = A.Except(B).ToList(); #endregion #region Exists列表中是否存在元素,如果第一个元素符合停止查找返回bool值 var res = numList.Exists(x => x > 3); #endregion #region Find 发现符合条件的元素返回第一个,如果没有发现返回0 var t2=numList.Find(x => x > 3); #endregion #region FindAll返回集合 var t3 = numList.FindAll(x => x > 5); #endregion #region FindIndex 如果找到与 match 定义的条件相匹配的第一个元素,则为该元素的从零开始的索引;否则为 -1。 var t4 = strList.FindIndex(x => x == "Elba"); var t5 = strList.FindIndex(2,x => x == "was"); #endregion #region FindLast,FindLastIndex返回最后一个元素,索引用法同上 #endregion #region First返回满足条件的第一个元素,FirstOrDefault返回满足条件的第一个元素,如果没找到返回默认值 var t8= numList.FirstOrDefault(x => x <3); //未找到返回默认值0 #endregion #region ForEach 对每个元素执行操作返回值void //numList.ForEach(x =>Console.WriteLine(x*2)); #endregion #region GetEnumerator迭代器属性可以用MoveNext和Current来实现foreach的效果 var t11=numList.GetEnumerator(); #endregion #region GetHashCode获取hash值 var t12=numList.GetHashCode(); #endregion #region GetRange创建元素的副本,更改其元素,原列表不变。 var newList= numList.GetRange(1,3); newList.Add(666); // numList.ForEach(x=> Console.WriteLine(x)); #endregion #region GetType 获取实例 var t13 = numList.GetType(); var type13 = t13.GetProperties(); ////返回t13的所有公共属性 #endregion #region GroupBy对元素进行分组 var ls = persons1.GroupBy(a => a.Name).Select(g => (new { name = g.Key, count = g.Count(), ageC = g.Sum(item => item.Age), moneyC = g.Sum(item => item.Money) })).ToList(); #endregion // 后续 Console.ReadKey(); } } /// <summary> /// 手动设计一个Person类。用于放到List泛型中 /// </summary> public class Person { public string Name { get; set; } public int Age { get; private set; } public string Sex { get; set; } public int Money { get; set; } public Person(string name, string sex, int age, int money) { this.Name = name; this.Age = age; this.Sex = sex; this.Money = money; } } }