C#---第十二课:列表操作的高级用法---FindAll()、Find()、Select()、Where()、Sort()、Exists()

本文详细介绍了C#中Find()、FindAll()函数用于筛选字符串和整数列表,Select()和Where()用于操作对象属性,以及Sort()方法对列表排序。通过实例展示了如何使用这些方法处理对象和基本数据类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Find() & FindAll() 的使用

Find() 获取第一个符合条件的元素并返回该元素
FindAll() 获取所有符合条件的元素,并最终返回一个列表


namespace AlienDemo
{
    class AlienDemoClass
    {
        static void Main()
        {
        	// 获取字符串中尾部为“1”的字符串的列表
            List<string> strList = new List<string>() { "Alien_1", "ware_1", "hello", "world" };
            List<string> resultStrList = strList.FindAll(delegate (string str) {return str.EndsWith("1"); });
            PrintListInfo(resultStrList);

			// 获取列表中,元素大于33的所有元素列表
            List<int> intList = new List<int>() { 12, 23, 34, 56 };
            List<int> reIntList = intList.FindAll(delegate (int item) { return item > 33 ; });
            PrintListInfo(reIntList);

			// 获取列表中,第一个尾部为1的元素
            string resultStr = strList.Find(delegate (string str) { return str.EndsWith("1"); });
            Console.WriteLine("resultStr------>{0}", resultStr);


			// 打印方法
            static void PrintListInfo<T>(List<T> listName)
            {
                foreach (var item in listName)
                {
                    Console.Write("{0} , ", item);
                }
                Console.WriteLine("\t");
            }
        }   
    }
}


Alien_1 , ware_1 , 	
34 , 56 , 	
resultStr------>Alien_1



2.Select() & Where()的使用

一般列表中的元素是对象的时候,可以通过Select & Where两个函数获取列表中对象的属性值列表


namespace AlienDemo
{
    #region 测试Model
    public class TestModel
    {
        public int Id { get; set; }
        public String Name { get; set; }
        public decimal Score { get; set; }
    }
    #endregion


    class AlienDemoClass
    {

        static void Main()
        {
            #region list.Select
            List<TestModel> selectList = new List<TestModel>();
            selectList.Add(new TestModel { Id = 3, Name = "U3", Score = 30 });
            selectList.Add(new TestModel { Id = 2, Name = "U2", Score = 20 });
            selectList.Add(new TestModel { Id = 4, Name = "U4", Score = 40 });
            selectList.Add(new TestModel { Id = 1, Name = "U1", Score = 10 });
            #endregion

            // 获取每个列表中元素的Id属性值,对应的列表
             List<dynamic> selectResList = selectList.Select(
                t => (dynamic)t.Id
                ).ToList();

            PrintListInfo(selectResList);


            // 获取每个元素的Id和Name属性值,对应的二级列表
            selectResList = selectList.Select(t => (dynamic)new { t.Id, t.Name }).ToList();
            PrintListInfo(selectResList);

            static void PrintListInfo<T>(List<T> listName)
            {
                foreach (var item in listName)
                {
                    Console.Write("{0} , ", item);
                }
                Console.WriteLine("\t");
            }

        }      
    }
}



//3 , 2 , 4 , 1 
//{ Id = 3, Name = U3 } , { Id = 2, Name = U2 } , { Id = 4, Name = U4 } , { Id = 1, Name = U1 }




【特殊用法:】

如果Select()中有判断的部分,则最终返回的列表是布尔类型bool的列表



 List<dynamic> selectResList = selectList.Select(
    t => (dynamic)t.Id > 3
    ).ToList();

PrintListInfo(selectResList);


//  False , False , True , False ,



3.Sort() 对类对象列表进行排序


namespace AlienDemo
{
    public class TestModel
    {
        public int Id { get; set; }
        public String Name { get; set; }
        public decimal Score { get; set; }
    }


    class AlienDemoClass
    {

        static void Main()
        {
            #region list.Select
            List<TestModel> selectList = new List<TestModel>();
            selectList.Add(new TestModel { Id = 3, Name = "U3", Score = 30 });
            selectList.Add(new TestModel { Id = 2, Name = "U2", Score = 20 });
            selectList.Add(new TestModel { Id = 4, Name = "U4", Score = 40 });
            selectList.Add(new TestModel { Id = 1, Name = "U1", Score = 10 });
            #endregion

            #region list.Select
            // 根据列表中元素的Id属性,从小到大对类排序
            // method1:
            //selectList.Sort((x, y) => (x.Id - y.Id)) ;

            // method2:
            selectList.Sort((x, y) =>
            {
                return (x.Id - y.Id);
            });

            // 根据列表中元素的Id属性,从大到小对类排序
            // method3:
            //selectList.Sort((x, y) => x.Id > y.Id ? -1 : 0);

            #endregion

            foreach (TestModel item in selectList)
            {
                Console.Write("{0} , ",item.Id);
            }
            Console.WriteLine("\t");

        }
    }
}



4.Exists() 判断对象列表中是否有符合条件的对象


namespace AlienDemo
{
    #region 测试Model
    public class TestModel
    {
        public int Id { get; set; }
        public String Name { get; set; }
        public decimal Score { get; set; }
    }
    #endregion


    class AlienDemoClass
    {

        static void Main()
        {
            #region list.Select
            List<TestModel> selectList = new List<TestModel>();
            selectList.Add(new TestModel { Id = 3, Name = "U3", Score = 30 });
            selectList.Add(new TestModel { Id = 2, Name = "U2", Score = 20 });
            selectList.Add(new TestModel { Id = 4, Name = "U4", Score = 40 });
            selectList.Add(new TestModel { Id = 1, Name = "U1", Score = 10 });
            #endregion

			// 如下多种写法均可
			// 最原始写法
            //var exists = selectList.Exists((TestModel t) => t.Id == 2 ? true : false).ToString();
			
			// 省略了三元表达式,最终效果一样
            //var exists = selectList.Exists((TestModel t) => t.Id == 2).ToString();
            
            // 省略了列表中元素t的声明
            //var exists = selectList.Exists(t => t.Id == 2).ToString();

			// 对布尔类型结果直接打印,省去了转string过程
            var exists = selectList.Exists(t => t.Id == 2);
        }
    }
}


//  True========>System.Boolean

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hello-alien

您的鼓励,是我最大的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值