本来我应该要把这些写在“新鲜事”的,但是“新鲜事”不支持markdown,所以我还是写在了“分享”版块。
今天在leetcode用C#刷题,遇到了一段非常秀的代码。
/// <summary>
/// My code
/// </summary>
public class Solution
{
public int[] RunningSum(int[] nums)
{
int[] ans=new int[nums.Length];
int item=0;
for(int i=0;i<nums.Length;i++)
{
item+=nums[i];
ans[i]=item;
}
return ans;
}
}
/// <summary>
/// Dalao's code
/// </summary>
public class Solution
{
public int[] RunningSum(int[] nums)
{
int last = 0;
return nums.Select(x =>
{
last = last + x;
return last;
}).ToArray();
}
}
查了百度发现,Select
是IEnumerable<T>
类中的一个方法。Select
方法在命名空间System.Linq
中被定义。而数组是继承了IEnumerable<T>
类的,这个类在命名空间System.Collections.Generic.IEnumerable<int>
里面,因此可以使用这个方法。
在C#中,方法的参数可以是lambda表达式。因为这里既要对变量last
做出修改,又要返回last
的值,因此得写成Statement lambda才行。
最后不要忘了把IEnumerable<T>
转换成数组。