Lambda表达式可在3个数字中找到最大的
|
背景:我正在尝试编写尽可能短的lambda表达式,以找到3个数字中的最大数字。
当然,实习生有能力做到这一点。
Func<int, int, int, int> greatestNumber2 = (x, y, z) => (x > y) ? ((x > z) ? x : z) : ((y > z) ? y : z);
但我的意图是实现以下功能。
greatest (x, y, z) = if (greater (x, y)>z) then greater(x, y) else z;
我能够通过两种方式做到这一点。
Func<int, int, int> greaterNumber = null;
Func<int, int, int, int> greatestNumber = null;
//Expression 1
greaterNumber = (x, y) => x > y ? x : y;
greatestNumber = (x, y, z) => greaterNumber(x, y) > z ? greaterNumber(x, y) : z;
//Expression 2
greatestNumber = (x, y, z) => {
Func<int, int, int> greater = (i, j) => i > j ? i : j;
return greater(x, y) > z ? greater(x, y) : z;
};
在表达式2中,我能够以某种方式实现我想要的功能,即定义函数以从同一表达式本身的两个数字中找到较大的那个。但是,这是一个语句lambda。
有没有一种方法可以编写一行内联的lambda来定义和使用最大本身的表达式中的2个数字中的较大者。
没有找到相关结果
已邀请:
2 个回复
锹缄
编辑:只是重读了这个问题,看来您想递归仅一个lambda定义的
lambda。我认为您无法这样做,因为
的签名不同于
。您可以使用带有a7ѭ参数的普通函数来做一些更笼统的操作,但不涉及lambda。 编辑2:正如@Anthony所说,尽管创建数组很短而且很简单,但是创建数组可能会过大。您可以稍微简化Expression 2:
抽法
样本测试应用程序: