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

时间:2017-02-24 20:23:57

标签: c#

给出两个列表A和B,以便

void foo( int *, size_t size );
...
int arr2[10][20];
int arr3[20][10][5];

foo( &arr2[0][0], sizeof arr2 / sizeof arr2[0][0] );
foo( &arr3[0][0][0], sizeof arr3 / sizeof arr3[0][0][0] );

如何在一行(或几行)中使用A[0] = {1,2,3,4} A[1] = {3,4,5,6} B[0] = {2,5,6,9} B[1] = {4,5,7,8} 在所有四个列表A [0],A [1],B [0]和B中返回值1之后的最大数字[1]?在多行中,我会这样做:

LINQ

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

1 个答案:

答案 0 :(得分:1)

基本上,您可以将两个数组集合连接在一起,然后对于每个数组,您可以过滤小于或等于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;