Lambda表达式可在3个数字中找到最大的

问题描述

| 背景:我正在尝试编写尽可能短的lambda表达式,以找到3个数字中的最大数字。 当然,实习生有能力做到这一点。
Func<int,int,int> greatestNumber2 = (x,y,z) => (x > y) ? ((x > z) ? x : z) : ((y > z) ? y : z);
但我的意图是实现以下功能。
greatest (x,z) = if (greater (x,y)>z) then greater(x,y) else z;
我能够通过两种方式做到这一点。
            Func<int,int> greaterNumber = null;
            Func<int,int> greatestNumber = null;

            //Expression 1
            greaterNumber = (x,y) => x > y ? x : y;
            greatestNumber = (x,z) => greaterNumber(x,y) > z ? greaterNumber(x,y) : z;

            //Expression 2
            greatestNumber = (x,z) => {
                Func<int,int> greater = (i,j) => i > j ? i : j;
                return greater(x,y) > z ? greater(x,y) : z;
            };
在表达式2中,我能够以某种方式实现我想要的功能,即定义函数以从同一表达式本身的两个数字中找到较大的那个。但是,这是一个语句lambda。 有没有一种方法可以编写一行内联的lambda来定义和使用最大本身的表达式中的2个数字中的较大者。     

解决方法

如何构建数组并使用LINQ?可能比计算具有多个输入(未经测试)的所有逻辑路径更容易扩展:
Func<int,int,int> f = (x,y,z) => new[] { x,z }.Max();
编辑:只是重读了这个问题,看来您想递归仅一个lambda定义的
greatestNumber
lambda。我认为您无法这样做,因为
greatestNumber(x,y)
的签名不同于
greatestNumber(x,z)
。您可以使用带有a7ѭ参数的普通函数来做一些更笼统的操作,但不涉及lambda。 编辑2:正如@Anthony所说,尽管创建数组很短而且很简单,但是创建数组可能会过大。您可以稍微简化Expression 2:
Func<int,int> greaterOf = (x,y) => x > y ? x : y;
Func<int,z) => greaterOf(x,greaterOf(y,z));
    ,关于以下内容的情况如何:
Func<int,int> greatest = (x,z) => Math.Max(x,Math.Max(y,z));
样本测试应用程序:
using System;

class Program
{
    static void Main(string[] args)
    {
        Func<int,z));

        Console.WriteLine(greatest(1,2,3));
        Console.WriteLine(greatest(1,3,2));
        Console.WriteLine(greatest(2,1,3));
        Console.WriteLine(greatest(2,1));
        Console.WriteLine(greatest(3,2));
        Console.WriteLine(greatest(3,1));
    }
}
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...