分享一道C#使用委托来求最大值的面试题你会不?

简介: 求最大值的面试题
需求:

对一个数组进行处理,获取其中最大值,但是类型不定,“最大值”的算法也不一样。使用委托把最大算法稳定下来,把比较规则通过委托进行“开放”?
微信截图_20211209145031.png

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestConsole
{

    class Program
    {
        delegate bool CompareNum(object obj1, object obj2);
        static void Main(string[] args)
        {
            object[] objs = { 1, 2, 4, 4, 2, 1, 2, 3 };
            //通过这样写,获取最大值的算法已经确定,在传参数的是后指定上比较方法就好了
            //用委托后,我们不在为每个获取最大值的方法都去写一种算法
            int max=(int)GetMax(objs, CompareInt);//原生的写法为GetMax(objs,new CompareNum(CompareInt));//只不过编译器帮我们进行了处理
            Console.WriteLine(max);
            Console.ReadKey();
        }
        static bool CompareInt(object obj1, object obj2)
        {
            int i1 = (int)obj1;
            int i2 = (int)obj2;
            return i1 > i2;
        }
        static object GetMax(object[] obj, CompareNum cpn)
        {
            object max = obj[0];
            for (int i = 1; i < obj.Length; i++)
            {
                if (!cpn(max, obj[i]))
                {
                    max = obj[i];
                }
            }
            return max;
        }
    }
}

使用匿名方法改造GetMax方法

    {
        delegate bool CompareNum(object obj1, object obj2);
        static void Main(string[] args)
        {

            object[] objs = { 1, 2, 4, 4, 2, 1, 2, 3 };
           
            CompareNum cpn = delegate (object obj1, object obj2)
            {
                int i1 = (int)obj1;
                int i2 = (int)obj2;
                return i1 > i2;
            };         
            int max = (int)GetMax(objs, cpn);//使用匿名方法
            Console.WriteLine(max);
            Console.ReadKey();
        }
        static bool CompareInt(object obj1, object obj2)
        {
            int i1 = (int)obj1;
            int i2 = (int)obj2;
            return i1 > i2;
        }
        static object GetMax(object[] obj, CompareNum cpn)
        {
            object max = obj[0];
            for (int i = 1; i < obj.Length; i++)
            {
                if (!cpn(max, obj[i]))
                {
                    max = obj[i];
                }
            }
            return max;
        }
    }
}

其实还可以更简略,比如lamda...

相关文章
|
7月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
168 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
7月前
|
算法 C# 数据库
【干货】一份10万字免费的C#/.NET/.NET Core面试宝典
C#/.NET/.NET Core相关技术常见面试题汇总,不仅仅为了面试而学习,更多的是查漏补缺、扩充知识面和大家共同学习进步。该知识库主要由自己平时学习实践总结、网上优秀文章资料收集(这一部分会标注来源)和社区小伙伴提供三部分组成。该份基础面试宝典完全免费,发布两年来收获了广大.NET小伙伴的好评,我会持续更新和改进,欢迎关注我的公众号【追逐时光者】第一时间获取最新更新的面试题内容。
300 1
|
7月前
|
开发框架 算法 搜索推荐
C# .NET面试系列九:常见的算法
#### 1. 求质数 ```c# // 判断一个数是否为质数的方法 public static bool IsPrime(int number) { if (number < 2) { return false; } for (int i = 2; i <= Math.Sqrt(number); i++) { if (number % i == 0) { return false; } } return true; } class Progr
135 1
|
6月前
|
C#
一文搞懂:一道关于C#linqwhere的面试题
一文搞懂:一道关于C#linqwhere的面试题
47 0
|
2月前
|
存储 开发框架 .NET
常见20道C#面试的题
常见20道C#面试的题
39 1
|
3月前
|
C#
C#一分钟浅谈:委托与事件的实现方式
本文详细介绍了C#编程中委托与事件的基础知识及应用场景。首先解释了委托的概念,包括定义与使用方法;接着介绍了事件这一基于委托的特殊类型,展示了如何在类中定义事件及跨类订阅与处理事件;最后讨论了常见问题如事件未处理异常、重复订阅及内存泄漏等,并提出了相应的解决方案。通过本文,读者将全面掌握委托与事件的使用技巧,提升应用程序的设计与开发水平。
144 7
|
4月前
|
编译器 C#
C#中内置的泛型委托Func与Action
C#中内置的泛型委托Func与Action
70 4
|
4月前
|
C#
C#中的委托(一)
C#中的委托(一)
41 1
|
4月前
|
C# C++
C#语言进阶(一)—委托
C#语言进阶(一)—委托
52 0