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

wg5945 2013-09-03 03:17:53

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表达式的形式,能不能简便一些~~

...全文
166 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2013-09-03
  • 打赏
  • 举报
回复
引用 9 楼 q107770540 的回复:
[quote=引用 6 楼 caozhy 的回复:] int[] myStage = { 4, 4, 3, 3, 4, 4, 3, 3 }; const int pastDays = 10; int sum = 0; int stage = myStage.TakeWhile(x => (sum += x) < pastDays).Count(); Console.Write(stage);
TakeWhile在此处用的巧妙~[/quote] 听到糖糖夸我,比得了分还高兴。
q107770540 2013-09-03
  • 打赏
  • 举报
回复
引用 6 楼 caozhy 的回复:
int[] myStage = { 4, 4, 3, 3, 4, 4, 3, 3 }; const int pastDays = 10; int sum = 0; int stage = myStage.TakeWhile(x => (sum += x) < pastDays).Count(); Console.Write(stage);
TakeWhile在此处用的巧妙~
q107770540 2013-09-03
  • 打赏
  • 举报
回复
总感觉目前的代码还不够牛X,期待更牛X的代码出现~ 还有个思路,就是将判断的逻辑封装成扩展方法,直接 int stage = myStage.扩展方法名(10) 获取即可
threenewbee 2013-09-03
  • 打赏
  • 举报
回复
来迟了。。。
threenewbee 2013-09-03
  • 打赏
  • 举报
回复
int[] myStage = { 4, 4, 3, 3, 4, 4, 3, 3 }; const int pastDays = 10; int sum = 0; int stage = myStage.TakeWhile(x => (sum += x) < pastDays).Count(); Console.Write(stage);
wg5945 2013-09-03
  • 打赏
  • 举报
回复
引用 2 楼 q107770540 的回复:
	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);
其实我发这个帖子,就是想看看你回复的一些很牛逼的写法~~
wg5945 2013-09-03
  • 打赏
  • 举报
回复
引用 3 楼 claymore1114 的回复:

            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);
            });
谢谢~~
claymore1114 2013-09-03
  • 打赏
  • 举报
回复

            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);
            });
q107770540 2013-09-03
  • 打赏
  • 举报
回复
	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);
wg5945 2013-09-03
  • 打赏
  • 举报
回复
没有大神莅临指导一下么~~ 想学习一下lambda式的写法~~

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧