मेरे पास लोगों की ऑर्डर की गई सूची है। मेरे पास एक व्यक्ति है जो मुझे पता है कि उस संग्रह में मौजूद है। मैं कैसे निर्धारित कर सकता हूं कि सूची में कौन सा व्यक्ति अगला है?संग्रह में निर्दिष्ट तत्व के बाद तत्व को खोजने के लिए लिंक का उपयोग
उत्तर
आप कुछ इस तरह कर सकता है:
IEnumerable<Person> persons = ..
var firstPersonAfterJack = persons.SkipWhile(p => p.Name != "Jack")
.ElementAt(1); //Zero-indexed, means second
विचार एक दृश्य तत्व लंघन जब तक आप शर्त को पूरा जिसका परिणाम का उत्पादन होता है, तो कि अनुक्रम का दूसरा तत्व ले लो।
कोई गारंटी नहीं कि क्वेरी एक परिणाम वापस आ जाएगी अगर कोई (उदाहरण के लिए एक मैच कभी नहीं पाया जाता है, या उस क्रम का अंतिम तत्व है), तो आप ElementAtOrDefault
साथ ElementAt
बदल सकते हैं, और फिर एक null
के लिए जाँच करने के लिए टेस्ट करना सफलता असफलता।
मुझे लगता है कि आप अपने प्रश्न में कहते हैं कि आपके पास लोगों की सूची है। यदि आप अधिक विस्तार से इसका अर्थ समझ सकते हैं, तो हम एक बेहतर उत्तर प्रदान करने में सक्षम हो सकते हैं (उदाहरण के लिए, हमें अनुक्रम को रैखिक-खोज नहीं करना पड़ सकता है)।
SkipWhile
एक ऐसी विधि है जो भविष्यवाणी करता है और भविष्यवाणी झूठी होने तक सबकुछ छोड़ देता है। यह उस तत्व और सब कुछ के बाद देता है।
var remainingPeople = collectionOfPeople.SkipWhile(p => !isThePerson(p));
if (remainingPeople.Count() == 1)
{
// the person was the last in the list.
}
var nextPerson = remainingPeople.Skip(1).First();
जहां isThePerson
एक विधि है कि एक व्यक्ति लेता है और सच रिटर्न अगर यह व्यक्ति आप इसे रुचि रखते हैं है।
यहां 2 मुद्दे हैं: 1) * पूरे * स्रोत अनुक्रम का एक अनावश्यक गणना है। 2) यह तब विफल हो जाएगा जब 'शेष लोग। गणना() == 0' यानी स्थिति कभी संतुष्ट नहीं होती है। – Ani
1) मुझे नहीं लगता कि यह पूरे अनुक्रम को दो बार कहां समझाता है। क्या आप कहां बता सकते हैं? 2) अगर यह सूची में नहीं है तो यह असफल हो जाएगा लेकिन आवश्यकताएं कहती हैं कि व्यक्ति को सूची में गारंटी दी जाती है, इसलिए यह कोई समस्या नहीं है। –
याद रखें कि अधिकांश LINQ ऑपरेटर स्थगित निष्पादन का उपयोग करते हैं। 'शेष लोग 'एक * क्वेरी * है, न कि सूची या सरणी। इसके परिणाम दो बार पुनः प्राप्त किए जाते हैं, एक बार 'गणना()' के लिए और एक बार 'छोड़ें (1)। सबसे पहले() '। – Ani
- 1. सीएसएस के बाद मेलो लिंक जोड़ने के लिए तत्व?
- 2. XPath - किसी अन्य तत्व के बाद पहला तत्व चुनें
- 3. matlab: तत्व के बाद तत्व डालने?
- 4. सूची में तत्व और अगले तत्व के बीच टुकड़े के अंतर को पाने के लिए लिंक
- 5. को लिंक/एक तत्व
- 6. एल्गोरिथ्म अनुक्रम का तत्व मूल्य खोजने के लिए
- 7. खोजने सरणी तत्व
- 8. पीएचपी xpath - एक मूल्य के साथ तत्व खोजने के लिए और भी पहले और तत्व के बाद
- 9. जावास्क्रिप्ट: iframe तत्व जोड़ने के बाद पेज
- 10. किसी विशिष्ट तत्व से पहले और बाद में तत्व ढूंढें
- 11. jQuery: किसी अन्य तत्व के बाद तत्व जोड़ें
- 12. एसटीएल एमएपी मानचित्र में तत्व खोजने के लिए खोज() या [एन] पहचानकर्ता का उपयोग करना चाहिए?
- 13. Jquery insert केवल तत्व के बाद यदि तत्व मौजूद है
- 14. एक और तत्व के बाद एक तत्व जोड़ें?
- 15. एचक्यूएल: एक संग्रह का एक तत्व दूसरे संग्रह में है?
- 16. लिंक/तत्व विस्तार के जेएक्स-आरएस कार्यान्वयन?
- 17. पहुँच jQuery तत्व संलग्न समारोह के बाद
- 18. DataGridView - उपयोग DataPropertyName चाइल्ड तत्व संपत्ति को दिखाने के लिए
- 19. घटनाओं की संख्या को खोजने के लिए गणना का उपयोग
- 20. 5 सेकंड के बाद jQuery ऑटोहोइड तत्व
- 21. निर्दिष्ट तत्व के लिए वेबकिट स्क्रॉलबार शैली लागू करें
- 22. वर्तमान तत्व के बाद Jquery लक्ष्य अवधि
- 23. href तत्व के लिए Xpath
- 24. किसी संग्रह में आइटम्स को खोजने के लिए LINQ से ऑब्जेक्ट का उपयोग करना जो
- 25. लापता] तत्व सूची पार्स JSON के बाद
- 26. लगातार दोहराने वाले तत्वों को खोजने के लिए लिंक का उपयोग करें
- 27. कॉपीराइट प्रतीक: के बाद छद्म तत्व
- 28. समवर्ती संग्रह और अद्वितीय तत्व
- 29. jQuery - एक फ़्लोटिंग तत्व बनाने के लिए एक और तत्व
- 30. सिंटेक्स त्रुटि का उपयोग करते समय HTML.html का उपयोग करते समय HTML तत्व को स्क्रिप्ट तत्व
बस मुझे इसे हराया :-) – finnw
@finnw: हमने भी वही संपत्ति नाम चुना है। कल्पना कीजिए कि क्या हम एक ही व्यक्ति का नाम भी चुनते हैं। :) – Ani
यह एक सामान्य लिंक से ऑब्जेक्ट क्वेरी के लिए एक अच्छा समाधान है, लेकिन 'SkipWhile' क्वेरी ऑपरेटर लिंक से एसक्यूएल में समर्थित नहीं है। –