C 便捷實現可迭代物件間的賦值

2022-01-18 05:36:35 字數 2051 閱讀 8470

目錄​ 問題起源於本人的乙個練手的撲克牌程式:洗完牌之後要發給場上的三人。

​ 只發給單個人的時候用 foreach 迴圈一下就好了,但三個人就有點麻煩了。

​ 牌組用list儲存你可能會想到這樣寫:

for (int i = 0; i < precard.count; i++)

​ 或者這樣寫

int i = 0;

dowhile (i < precard.count);

​ 但如果還想使用類似迭代器的方法,那麼可以使用 getenumerator(),因為我們知道 foreach 裡面實際上就是呼叫了這個方法。

​ 所以我們還可以直接呼叫 getenumerator 和 movenext 來進行迭代:

ienumerator ie = precard.getenumerator();

while(ie.movenext())

​ 如果是直接把上面的**搬過來,會發現add方法那裡會報錯,需要提供兩個引數,鍵和值。

​ 難道必須要對得到的 ienumerator 再用一次 getenumerator?

​ 實際上大可不必,因為針對這種鍵值對,我們有乙個玩意叫做 idictionaryenumerator。看名字就知道它就是為此而生的。

idictionaryenumerator ie = dict.getenumerator();

while(ie.movenext())

​ 至此我們通過寫手動擋的 foreach ,成功的實現了可迭代物件間的賦值。

​ 在c#中 foreach 語句,能夠進行比for迴圈語句更直接和簡單的對集合的迭代,編譯器會將 foreach 編譯來呼叫 getenumerator 和 movenext方法以及current屬性。

​ 實際上 foreach 語句編譯之後也會產生類似於上面所寫的**。實際上這幅圖可以比較清楚的說明一切。

​ 其實前面的做法都是捨近求遠....

​ 我一開始寫的時候,覺得那樣做還挺好的。甚至還自信滿滿的點了傳送到首頁[捂臉]

​ 然後....當然是馬上就被撤了。我當然是不服的(聲音減弱),於是就發郵件詢問。

​ 結果當然就是被管理員教育了,其實管理員挺耐心,教會了我很多。(隔著螢幕我也不知道對面想不想順著網線打我)

​ 如果你還想保留原來的集合的話,那麼用上面的方法是可行的,如果不想的話,那麼像下面那樣使用linq會更好。

var precard = new queue() ;

precard.enqueue("03a");

precard.enqueue("03b");

precard.enqueue("03c");

precard.enqueue("03d");

precard.enqueue("04a");

precard.enqueue("04b");

var players = new list>

;while (precard.count > 0)

players.foreach(p =>

);

對於字典,可以使用keyvaluepair

var precard = new queue>(

new dictionary,,,,,

});var players = new list>>

;while (precard.count > 0)

players.foreach(p =>

);

可能各位早會這樣弄了,讓各位進來實在是不好意思了。

最後說一句,linq真好用!

如何實現可迭代物件和迭代器物件 二

之前我們介紹了可迭代物件和迭代器物件,現在我們就實現這兩個物件,滿足實際案例中的需求,解決方案如下 實現乙個迭代器物件weatheriterator,next方法每次返回乙個城市的氣溫 實現乙個可迭代物件weatheriterable,iter 方法返回乙個迭代器物件。如下 coding utf 8...

問題8 9 如何實現可迭代物件和迭代器物件

一 通過可迭代物件和python內建函式iter 得到迭代器 即,iter 可迭代物件 得到乙個迭代器 例 list 1 1,2,3,4,5 1 iter 物件 若此物件想滿足迭代要求,其內部要有迭代介面或者乙個序列 iter 或者 getitm 2 迭代器只有乙個介面 next 呼叫next 時會...

Python的可迭代物件和迭代器物件

迭代器指的是迭代取值的工具,迭代是指乙個重複的過程,每一次重複都是基於上一次結果而來,迭代提供了一種通用的不依賴索引的迭代取值方式 但凡內建有 iter 方法的物件,都稱為可迭代物件,可迭代的物件 str,list,tuple,dict,set,檔案物件 1.既內建又 next 方法的物件,執行該方...