我想爲我的自定義集合(一棵樹)實現IEnumerable,所以我可以使用foreach來遍歷我的樹。但據我所知,foreach總是從集合的第一個元素開始。我想選擇foreach從哪個元素開始。是否有可能以某種方式更改從哪個foreach開始的元素?是否有可能從第一個使用foreach的元素開始迭代?
回答
是的。執行以下操作:
Collection<string> myCollection = new Collection<string>;
foreach (string curString in myCollection.Skip(3))
//Dostuff
Skip
是一個IEnumerable功能跳過然而,許多你指定開始在當前索引。在另一方面,如果你想使用只前三,你會使用.Take
:
foreach (string curString in myCollection.Take(3))
這些甚至可以配對在一起,所以如果你只是想4-6的項目,你可以這樣做:
foreach (string curString in myCollection.Skip(3).Take(3))
請注意,C#區分大小寫,所以這些都不會如圖所示工作... –
良好的通話。 WTB自動完成(gahh不記得它的真實名稱)在stackoverflow;) – MoarCodePlz
這實際上是跳過或它只是創建一個副本? I.E.將這兩個是不同的: '的foreach(列表
您可以使用Enumerable.Skip跳過一些元素,並從那裏開始。
例如:
foreach(item in theTree.Skip(9)) // Skips the first 9 items
{
// Do something
但是,如果你正在寫一棵樹,你可能要提供在樹上項目本身將返回一個新IEnumerable<T>
它將從那裏下來枚舉的成員。從長遠來看,這可能會更有用。
像'的IEnumerable
謝謝你的回答,跳躍看起來很有希望,閱讀有關跳過MSDN信息,我得到了定論,也許有可能寫一個方法StartFrom(這IEnumerable的
@inferno:是的,你可以輕鬆地做到這一點。不過,我也只是一個方法/屬性添加到MyTreeElement這更像是:'的IEnumerable
這是最容易使用在LINQ的Skip
方法爲這個對象,跳過一個給定數目的元件:
foreach (var value in sequence.Skip(1)) // Skips just one value
{
...
}
顯然只是改變1爲任何其它值跳過不同數量的元件.. 。
同樣,您可以使用Take
來限制返回的元素的數量。
您可以在my Edulinq blog series中閱讀更多關於這兩種方法(以及相關的SkipWhile
和TakeWhile
方法)。
喬恩,沒有這一點,如果「序列」是空運行異常的風險? – WEFX
@WEFX:嗯,我們不知道是否sequence''可以順理成章'null'與否。據推測OP可以自己處理 - 這不是問題的一部分...... –
Foreach
將以您實施IEnumerable
所定義的方式迭代您的收藏。因此,儘管您可以跳過元素(如上所示),但您仍然在技術上按照相同順序迭代元素。
不知道你在努力達到什麼,但是你的班級可能有多個IEnumerable
屬性,每個屬性都按特定順序枚舉元素。
- 1. 是否有可能使用boost foreach迭代多個容器?
- 2. Java,TreeSet。我們是否可以迭代不是第一個元素的元素?
- 3. 是否有可能有一個按鈕開始下載一個DOM元素?
- 4. 如何從foreach循環的第二次迭代開始輸出?
- 5. 是否有像「迭代迭代,如果它有元素,否則...」?
- 6. 是否有可能在jstl中使用foreach同時迭代兩個項目?
- 7. 是否有可能重啓for循環到第一次迭代?
- 8. 是否有可能從一個特定的數字開始「appendListItem」?
- 9. 是否可以停止從元素開始的所有事件?
- 10. 從第一個到最後一個元素迭代json
- 11. 是否有可能使一個元素對jquery不可見
- 12. 第一個元素以換行開始
- 13. 如何離開第一個迭代元素?
- 14. Python:是否有可能使用標準語法創建一個類可迭代?
- 15. 有沒有辦法讓一個列表上的For循環在列表的第二個元素處開始其循環(迭代)(跳過第一個元素)?
- 16. 如何檢查一個實體是否是foreach循環的第一個元素
- 17. 是否可以使用for-each循環迭代單次迭代中的下一個元素以及How?
- 18. C# - 是否有可能迭代GC堆?
- 19. 是否有可能通過JSONArray迭代?
- 20. 是否可以使用GridBagLayout使JPanel內的元素從左上角開始?
- 21. Foreach元素 - 只是第一個元素工作
- 22. 是否有可能在Typescript迭代一個常量枚舉?
- 23. 如何開始迭代而不是從一開始
- 24. 是否有可能取代每個迭代mule中sessionVariable的值
- 25. 例外:DrawingSurfaceBackgroundGrid必須是開始繪製的第一個元素
- 26. 檢查當前迭代元素是否是最後一個元素?
- 27. 如何從最後一個元素開始迭代數組? (紅寶石)
- 28. 是否有可能使用開關盒通過一個表的行並作用於一個元素
- 29. 是否有可能使用jQuery選擇一個元素使用變量?
- 30. PHP循環:每4個迭代從第二個開始
我會遵循最簡單的原則:http://en.wikipedia.org/wiki/Principle_of_least_astonishment – ChaosPandion
如果你不從第一個元素開始,你如何定義迭代器的行爲?當它到達序列的末尾時會發生什麼?它是否會返回到第一個元素並遍歷剩餘的元素? –
@ ChaosPandion的評論是我正在處理這些問題的地方。 :) –