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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值