सवाल LINQ के साथ सी # में क्रमबद्ध सूची


मैं सी # में एक सूची सॉर्ट करना चाहता हूँ।

जैसे संरचना संपत्ति एवीसी सच हो जाती है तो उन्हें पहले दिखाएं तो एवीसी झूठी हो जाती है। सी # LINQ में ऐसा करने का कोई तरीका है?


44
2017-10-23 11:57


मूल




जवाब:


खैर, LINQ का उपयोग करने का सबसे आसान तरीका इस तरह कुछ होगा:

list = list.OrderBy(x => x.AVC ? 0 : 1)
           .ToList();

या

list = list.OrderByDescending(x => x.AVC)
           .ToList();

मैं मानना कि प्राकृतिक आदेश bool मूल्य है false < true, लेकिन पहला फॉर्म इसे स्पष्ट IMO बनाता है, क्योंकि हर कोई इसे जानता है 0 < 1

ध्यान दें कि यह मूल सूची को स्वयं क्रमबद्ध नहीं करेगा - यह एक नई सूची बनाएगा, और संदर्भ को वापस असाइन करेगा list चर। यदि आप जगह में सॉर्ट करना चाहते हैं, तो आपको इसका उपयोग करना चाहिए List<T>.Sort तरीका।


96
2017-10-23 12:01



क्या टॉलीस्ट () यहां जरूरी है? - Krishna P S
@ कृष्णापीएस: हां, संकलन-समय का प्रकार मानते हैं list है List<T>। अन्यथा आप एक असाइन करने की कोशिश करेंगे IEnumerable<T> ए के लिए LIst<T> चर। आपको इसकी आवश्यकता नहीं है अगर आपको केवल एक अनुक्रम की आवश्यकता है जिसे हर बार जब आप इसे फिर से शुरू करते हैं तो आलसी मूल्यांकन किया जाएगा। - Jon Skeet
।धन्यवाद! तो एक सूची लौटने का आदेश जो आलसी मूल्यांकन किया गया है? क्या मुझसे कोई चूक हो रही है? क्षमा करें कि मैं उलझन में हूँ? मुझे ऐसी स्थिति का सामना करना पड़ रहा है जहां मैंने सूची का आदेश दिया है और इसे ऊपर के रूप में आईनेमरेबल के रूप में वापस कर दिया है, हालांकि जब मैं मूल्य बदलने के लिए उस लौटाई गई सूची में प्रत्येक के लिए एक करता हूं, तो मुझे लगता है कि आदेश बाधित है .. - Krishna P S
@KrishnaPS: OrderBy एक देता है अनुक्रम, एक सूची नहीं। ऐसा लगता है कि आपको अपनी समस्या का प्रदर्शन करने के लिए एक नया प्रश्न पूछना चाहिए। - Jon Skeet
कृपया इस प्रश्न पर मेरी मदद करें कि मैंने पोस्ट किया है stackoverflow.com/questions/41738008/... - Krishna P S


इस कदर?

LINQ में:

var sortedList = originalList.OrderBy(foo => !foo.AVC)
                             .ToList();

या जगह में:

originalList.Sort((foo1, foo2) => foo2.AVC.CompareTo(foo1.AVC));

जैसा कि जॉन स्कीट कहते हैं, यहां की चाल यह जान रही है false को 'छोटे' माना जाता है true.

यदि आपको लगता है कि आप अपने कोड में कई अलग-अलग स्थानों में इन ऑर्डरिंग ऑपरेशन कर रहे हैं, तो आप अपना प्रकार प्राप्त करना चाहेंगे Foo लागू करने के लिए IComparable<Foo> तथा IComparable इंटरफेस।


17
2017-10-23 12:02





मुझे लगता है कि आप उन सभी वस्तुओं के बीच एक सतत आदेश प्राप्त करने के लिए, जहां एवीसी समान है, उन्हें किसी और चीज द्वारा क्रमबद्ध करना चाहते हैं। उदाहरण के लिए नाम से:

var sortedList = list.OrderBy(x => c.AVC).ThenBy(x => x.Name).ToList();

9
2017-10-23 12:10