日期:2014-05-20  浏览次数:20765 次

能否用改成lambda表达式的形式?

int[] myStage = {4,4,3,3,4,4,3,3};
const int pastDays = 10;
int endDay = 0;
int stage = 0;

for (int offset = 0; offset < myStage.Length; offset++)
{
    int startDay = endDay;
    endDay = startDay + myStage[offset];
    if (pastDays <= startDay || pastDays > endDay) continue;
    stage = offset;
    break;
}
Console.Write(stage);


上面的代码能否改成lambda表达式的形式,能不能简便一些~~


------解决方案--------------------
本帖最后由 q107770540 于 2013-09-03 17:12:34 编辑
	int[] myStage = {4,4,3,3,4,4,3,3};
const int pastDays = 10;
    int startDay =0;
    int stage?=myStage.Select((x,i)=>new {x,i})
  .Aggregate((x,y)=>
{
startDay+=x.x;
    return startDay>=pastDays?x:y;
}).i;
Console.WriteLine(stage);

------解决方案--------------------

            int[] myStage = { 4, 4, 1, 3, 4, 4, 3, 3 };
            const int pastDays = 10;
            int endDay = 0;

            int stage = Array.FindIndex(myStage, o =>
            {
                int startDay = endDay;
                endDay = startDay + o;

                return (startDay < pastDays && pastDays <= endDay);
            });