志在指尖
用双手敲打未来

使用Yield关键字实现迭代

C#中有一个关键字“Yield”,这个关键字提供了迭代功用,你是不是没用过这个关键字呢,下面讲述一下此关键字。
Yield:
在执行迭代时,程序将自动存储上次迭代的位置,下次迭代时从上次迭代的位置继续执行。
代码实例:
运用Yield完成的迭代办法:
///
///用Yield生成字符汇合
///
///需求生成的字符个数
///生成的字符汇合
privateIEnumerable<string>CreateStrYield(intcount)
{
//初始次数
intindex=0;
//循环产生字符
while(index++<count)
{
//生成字符并中缀迭代返回
yieldreturn”Yield:”+index.ToString();
}
}
运用常见的For完成的迭代办法:
///
///用For生成字符汇合
///
///需求生成的字符个数
///生成的字符汇合
privateList<string>CreateStrFor(intcount)
{
//需求返回汇合
List<string>rel=newList<string>();
//生成字符
for(inti=0;i<count;i++)
{
rel.Add(“For:”+(i+1).ToString());
}
//返回结果
returnrel;
}
最后我们来测试一下两种迭代产生的结果:C#
[C#]纯文本查看
//需求生成的字符个数
intcountStr=5;
//输出Yield生成的字符
foreach(variteminCreateStrYield(countStr))
{
Console.WriteLine(item);
}
//输出For生成的字符
foreach(variteminCreateStrFor(countStr))
{
Console.WriteLine(item);
}
察看输出结果
Yield:1
Yield:2
Yield:3
Yield:4
Yield:5
For:1
For:2
For:3
For:4
For:5
两者的迭代完成了相同的功用,Yield关键字记载了迭代的位置,保证下一次迭代时分能从上一次迭代完成的位置继续执行。
运用Yield的应用场景:
eg:游戏配备的晋级胜利率,在1~5次的晋级胜利率为80%,6~8的晋级胜利率为50%,9~10的晋级胜利率为20%,大于10的概率都为10%,参见如下代码

///
///用Yield生成概率
///
///生成的概率汇合
privateIEnumerable<float>CreateProb()
{
/*在1~5次的晋级胜利率为80%,6~8的晋级胜利率为50%,9~10的晋级胜利率为20%*/
//初始次数
intindex=0;
//循环产生概率
while(index++<5)
{
//生成1~5概率
yieldreturn0.8f;
}
//循环产生概率
while(index++<9)
{
//生成6~8概率
yieldreturn0.5f;
}
//循环产生概率
while(index++<12)
{
//生成9~10概率
yieldreturn0.2f;
}
//大于10的概率都为10%
yieldreturn0.1f;
}
看一下输出结果
//输出概率
foreach(variteminCreateProb())
{
Console.WriteLine(item);
}
这是输出的结果
0.8
0.8
0.8
0.8
0.8
0.5
0.5
0.5
0.2
0.2
0.1
总结:假如你需求在一个完好的迭代中,不同的时分输出不同的且可控的结果,能够运用该关键字到达你的需求。

未经允许不得转载:IT技术网站 » 使用Yield关键字实现迭代
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载