给出两个列表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)。谢谢!
答案 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;