看到有人要嘲讽C#果断不能忍啊,刚睡醒从床上爬起来跑题了也要来一发啊。
int[][] Do( int[][] array ) { var result = form item in array group item by item[0] into g select new []{ g.Key, g.Sum( i => i[1] ), g.Sum( i => i[2] ) }; return result.ToArray() }
int[][] Do( int[][] array ) { return array.GroupBy( i => i[0] ).Select( g => new []{ g.Key, g.Sum( i => i[1] ), g.Sum( i => i[2] ) } ).ToArray(); }
有人提出了质疑,正常项目会这么写么?
嗯,应该说还是有一点儿区别的,因为上面是嘲讽模式。
int[][] Do( int[][] array ) { var result = form item in array group item by item[0] into g select new []{ g.Key, g.Sum( i => i[1] ), g.Sum( i => i[2] ) }; return result.ToArray() }
int[][] Do( int[][] array ) { return array.GroupBy( i => i[0] ) .Select( g => new []{ g.Key, g.Sum( i => i[1] ), g.Sum( i => i[2] ) } ) .ToArray(); }
嗯,正常项目是这么写的。
LINQ表达式其实是非常简洁易读的,我翻译一下:
返回 array.按照每一项的 i[0] 分组 .选择( 一个数组{ 分组键, 该分组内所有 i[1] 的总和, 该分组内所有 i[2] 的总和 } ) .转换为数组();