真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C#中創(chuàng)建無限序列(延遲加載)

無限序列意味著一個(gè)序列有無限多的元素。這似乎可以肯定,一般程序中內(nèi)存是有限的,不可能生成一個(gè)無限的序列。其實(shí),這里的無限序列指的是可以取任意多個(gè)元素。常規(guī)方法去初始化一個(gè)序列是無法實(shí)現(xiàn)。因此只要通過其他方式才能曲線實(shí)現(xiàn)。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、虛擬空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、東海網(wǎng)站維護(hù)、網(wǎng)站推廣。

使用IEnumerable接口,可以實(shí)現(xiàn)無限序列。因?yàn)镮Enumerable接口繼承于IEnumerator,因此實(shí)現(xiàn)了一個(gè)迭代器,也就是說,對(duì)于IEnumerable的實(shí)例(接口不能實(shí)例化,這里的意思指的是實(shí)現(xiàn)IEnumerable的類的實(shí)例)來說,可以使用迭代的方法依次遍歷它的元素。而且,IEnumerable的實(shí)例中的元素,并不是在定義的時(shí)候才有,而是在真正使用它的時(shí)候才會(huì)計(jì)算。因此我們可以在定義的時(shí)候定義一個(gè)無限的序列,而真正使用的時(shí)候,肯定只是取這個(gè)無限序列中的某幾個(gè)元素,這樣就只需迭代這幾個(gè)元素就行了。這就是延遲加載的好處。

具體實(shí)例如下,此處定義了一個(gè)無限的斐波納契序列。

static IEnumerable fib()
       {
           int pre = 0;
           int next = 1;
           while (true)
           {
               var val = pre + next;
               yield return val;
               pre = next;
               next = val;
           }
       }

乍一看,看到while (true),就覺得這是一個(gè)死循環(huán),其實(shí)不然,里面有一個(gè)yield,每次迭代都會(huì)拋出值。while (true)里面的是迭代需要的循環(huán),因?yàn)槭撬姥h(huán),也就是說可以迭代無數(shù)次。當(dāng)然,如果你換成for循環(huán),并且循環(huán)次數(shù)設(shè)成10次,那么只能迭代10次,這是就只是一個(gè)普通的有限序列了。

在使用這個(gè)序列的時(shí)候,可以如下:

var f = fib();//此時(shí)并未真正開始計(jì)算里面的元素。

如果要取10個(gè)元素,可以通過linq的擴(kuò)展方法Take(10)取元素,但是要知道,Take(10)這個(gè)函數(shù)也并未正真的去取10個(gè)數(shù),只有在真正用到的時(shí)候,才回去計(jì)算這些元素。

var list=f.Take(10);

下面的代碼要遍歷這個(gè)序列,此時(shí)才會(huì)正真去計(jì)算里面的元素值。

foreach (var i in  list )
{
       Console.WriteLine(i);
 }

或者在Take(10)之后直接調(diào)用ToList,也能使得序列馬上計(jì)算其中的元素。


分享名稱:C#中創(chuàng)建無限序列(延遲加載)
網(wǎng)頁(yè)路徑:http://weahome.cn/article/jgjcod.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部