Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用LINQ(C#)查找列表中的下一个最大数_C# - Fatal编程技术网

使用LINQ(C#)查找列表中的下一个最大数

使用LINQ(C#)查找列表中的下一个最大数,c#,C#,给定列表A和B的两个列表 A[0] = {1,2,3,4} A[1] = {3,4,5,6} B[0] = {2,5,6,9} B[1] = {4,5,7,8} 如何在一行(或尽可能少的行)中使用LINQ来返回四个列表A[0]、A[1]、B[0]和B[1]中值1之后的最大数字?在多行中,我将执行以下操作: int num1 = A[0].Find(item => item > 1); (answer is 2) int num2 = A[1].Find(item =>

给定列表A和B的两个列表

A[0] = {1,2,3,4}

A[1] = {3,4,5,6}

B[0] = {2,5,6,9}

B[1] = {4,5,7,8}
如何在一行(或尽可能少的行)中使用
LINQ来返回四个列表A[0]、A[1]、B[0]和B[1]中值1之后的最大数字?在多行中,我将执行以下操作:

int num1 = A[0].Find(item => item > 1); (answer is 2)

int num2 = A[1].Find(item => item > 1); (answer is 3)

int num3 = B[0].Find(item => item > 1); (answer is 2)

int num4 = B[1].Find(item => item > 1); (answer is 4)

int finalAnswer = Max(num1,num2,num3,num4); (final answer is 4)

答案应该可以扩展到任意数量的列表(而不仅仅是4个)。谢谢

基本上,您可以将两个数组集合连接在一起,然后对每个数组过滤小于或等于1的任何内容,并对结果排序,然后获取第一项。然后取这些值的最大值

int ans A.Concat(B).Select(x => x.Where(i => i > 1).OrderBy(i => i).First()).Max();
如果任何数组不包含至少一个大于1的数字,则将引发异常。在这种情况下,您可能希望改用
FirstOrDefault

int? ans A.Concat(B).Select(x => x.Where(i => i > 1).OrderBy(i => i).FirstOrDefault()).Max();
但是,如果列表中没有一个值大于1,则必须检查
ans
是否为
null

if(!ans.HasValue)
    throw new Exception("nothing over one");
int actualAnswer = ans.Value;

您的意思是希望每个列表中的第一项不是1,还是希望最小项大于1?那么对于{4,2,3,1}你想要4还是2?@juharr:我想从每个列表中找到1以上的下一个值。然后比较每个列表中的所有值并选择最大值。我希望这在我上面的例子中是清楚的。他们应该将这个网站重命名为CheatonYourHomegram.com这些不是家庭作业问题,但我可以看到它们看起来是什么样子。我在LINQ完全是个新手,但我得到的一些回复非常有用,值得学习。太好了,这很管用!我是否可以使用“Find”而不是“Where”、“OrderBy”和“First”,因为“Find”获取列表中与条件匹配的第一个数字?A.Concat(B)。Select(x=>x.Find(I=>I>1))。Max()似乎适合我。谢谢@dynomillie
Find
仅在列表已排序时有效。此外,如果没有值符合要求,它将返回0,因此如果列表中没有值超过1,则需要检查0。最后,如果您将要求更改为大于-1的数字,您将不知道结果0是否是实际答案,或者这是否意味着没有大于-1的值。