मैं अपने कस्टम संग्रह (एक पेड़) के लिए IENumerable को लागू करने के बारे में सोच रहा हूं, इसलिए मैं अपने पेड़ को पार करने के लिए 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))
ध्यान दें कि सी # केस-संवेदी है, इसलिए उनमें से कोई भी दिखाए गए अनुसार काम नहीं करेगा ... –
अच्छी कॉल। डब्ल्यूटीबी ऑटो-पूर्ण (गहह इसे वास्तविक नाम याद नहीं कर सकता); स्टैक ओवरफ्लो में;) – MoarCodePlz
क्या यह वास्तव में छोड़ देता है या यह सिर्फ एक प्रतिलिपि बनाता है? अर्थात।क्या ये दोनों अलग होंगे: 'foreach (पंक्ति
आप कुछ तत्वों को छोड़ने के लिए Enumerable.Skip का उपयोग कर सकते हैं, और इसे वहां शुरू कर सकते हैं।
उदाहरण के लिए:
foreach(item in theTree.Skip(9)) // Skips the first 9 items
{
// Do something
हालांकि, अगर आप एक पेड़ लिख रहे हैं, तो आप पेड़ स्वयं आइटम है कि एक नए IEnumerable<T>
जो वहाँ नीचे से गणना होगा वापस आ जाएगी पर एक सदस्य प्रदान करने के लिए चाहते हो सकता है। यह संभवतः लंबे समय तक अधिक उपयोगी होगा।
कुछ 'IENumerable
उत्तर देने के लिए धन्यवाद, छोड़ने के बारे में एमएसडीएन जानकारी पढ़ने के लिए आशाजनक लग रहा है, मुझे यह निष्कर्ष निकाला गया कि संभवतः एक विधि लिखना संभव है स्टार्टफ्रॉम (यह आईन्यूमेरेबल
@inferno: हाँ, आप आसानी से ऐसा कर सकते हैं। हालांकि, मैं केवल MyTreeElement में एक विधि/प्रॉपर्टी जोड़ूंगा जो कि अधिक था: 'आईनेमरेबल
यह इस के लिए वस्तुओं के लिए LINQ में Skip
विधि का उपयोग करने, तत्वों की दी गई संख्या को छोड़ने के लिए सबसे आसान है: किसी अन्य मूल्य तत्वों की एक अलग संख्या को छोड़ने के लिए के लिए
foreach (var value in sequence.Skip(1)) // Skips just one value
{
...
}
1 जाहिर है सिर्फ बदल ..
इसी तरह आप लौटाए गए तत्वों की संख्या को सीमित करने के लिए Take
का उपयोग कर सकते हैं।
आप my Edulinq blog series में इन दोनों (और संबंधित SkipWhile
और TakeWhile
विधियों) के बारे में अधिक पढ़ सकते हैं।
जॉन, अगर यह "अनुक्रम" शून्य है तो क्या यह अपवाद का जोखिम नहीं चलाता है? – WEFX
@WEFX: ठीक है, हमें नहीं पता कि 'अनुक्रम' वैध रूप से 'शून्य' हो सकता है या नहीं। संभवतः ओपी स्वयं को संभाल सकता है - यह वास्तव में सवाल का हिस्सा नहीं है ... –
Foreach
IEnumerable
के कार्यान्वयन द्वारा परिभाषित तरीके से आपके संग्रह पर फिर से शुरू होगा। इसलिए, हालांकि आप तत्वों को छोड़ सकते हैं (ऊपर बताए गए अनुसार), आप अभी भी उसी क्रम में तत्वों पर तकनीकी रूप से पुनरावृत्ति कर रहे हैं।
सुनिश्चित नहीं है कि आप क्या हासिल करने की कोशिश कर रहे हैं, लेकिन आपकी कक्षा में IEnumerable
गुण हो सकते हैं, जिनमें से प्रत्येक एक विशिष्ट क्रम में तत्वों को दर्शाता है।
- 1. क्या जावास्क्रिप्ट को उपयोग करने से पहले चर घोषित करने के लिए मजबूर करना संभव है?
- 2. निर्दिष्ट तत्व पहले से ही किसी अन्य तत्व का तार्किक बच्चा है। इसे पहले डिस्कनेक्ट करें
- 3. पहले से ट्रिगर करना, नॉकआउटजेएस
- 4. क्या पहले से ही अलग थ्रेड पर एसिंक प्रारंभ/समाप्ति विधियों का उपयोग करना आवश्यक है?
- 5. कोको दस्तावेज़-आधारित एप्लिकेशन प्रारंभ करना चयन विंडो पहले
- 6. क्या उनके शरीर को अजगर में घोषित करने से पहले कार्यों का उपयोग करना संभव है?
- 7. कछुए - क्या इसे करने से पहले नए फ़ोल्डर को अनदेखा करना संभव है?
- 8. संरचना में पहला तत्व प्रारंभ करना
- 9. क्या इसे प्रदर्शित करने से पहले एक HTML पृष्ठ को प्रीलोड करना संभव है?
- 10. प्रकाशन से पहले किसी ऐप मार्केट पेज का पूर्वावलोकन करना संभव है?
- 11. छद्म तत्वों से पहले :: बाद और :: के लिए "गणना" शैलियों का निरीक्षण करना संभव है?
- 12. का उपयोग करना: से पहले /: चयनकर्ता तत्वों
- 13. सुंदर बंद करने से पहले तत्व को सम्मिलित करने से पहले तत्व को सम्मिलित करने के लिए
- 14. जावास्क्रिप्ट: क्या सेटटाइमआउट से पहले क्लीयरटाइम कॉल करना ठीक है?
- 15. परिभाषित करने से पहले एक फ़ंक्शन को कॉल करना | PHP
- 16. अपलोड करने से पहले एक फ़ाइल को विभाजित करना?
- 17. किसी भी मौजूदा ऑनसबमिट/सबमिट से पहले सबमिट() फ़ंक्शन को बाध्य करना संभव है?
- 18. किसी विशिष्ट तत्व से पहले और बाद में तत्व ढूंढें
- 19. क्या विंडोज बैच में पहले से ही बनाई गई लाइन को संपादित करना संभव है?
- 20. क्या मुझे "addClass" से पहले "हैस्क्लास" का उपयोग करना चाहिए?
- 21. हालत - प्रतीक्षा से पहले अनलॉक करना चाहिए?
- 22. जावा; फ्रेम से पहले इन्सेट प्राप्त करना
- 23. पृष्ठ से पहले फ़ंक्शन निष्पादित करना window.print()
- 24. यूनियन अभिव्यक्ति का उपयोग करने से पहले, IQueryable चर को कैसे प्रारंभ करना चाहिए?
- 25. तैयार राज्य से पहले डोम में हेरफेर करना ठीक है?
- 26. jQuery है। दस्तावेज़ के अलावा किसी अन्य चीज़ पर पहले से ही उपयोगी है?
- 27. मैं पहले लोड करने से पहले क्या रख सकता हूं?
- 28. क्या विंडोज में म्यूटेक्स की स्थाई प्रारंभ करना संभव है?
- 29. अपलोड करने से पहले फ़ाइल आकार अपलोड करना
- 30. ओकैमल: इसे परिभाषित करने से पहले एक फ़ंक्शन घोषित करना
मैं कम से कम विस्मय के सिद्धांत का पालन करता हूं: http://en.wikipedia.org/wiki/Principle_of_least_astonishment – ChaosPandion
यदि आप पहले तत्व से प्रारंभ नहीं करते हैं, तो आप इटरेटर के व्यवहार को कैसे परिभाषित करते हैं? अनुक्रम के अंत तक पहुंचने पर क्या होता है? क्या यह पहले तत्व पर वापस जाता है और शेष तत्वों पर फिर से चला जाता है? –
@ कैओसपैंडियन की टिप्पणी वह जगह है जहां मैं उन प्रश्नों के साथ जा रहा था। :) –