2013-02-02 6 views
5

में दिनांकों के साथ क्रमबद्ध स्ट्रिंग सूची को मेरे पास List<string> तिथियों के साथ है।
मेरे सूची है:सी #

{"01/01/2013","10/01/2013","20/01/2013"} 

मैं इस तरह देखने के लिए सूची क्रमबद्ध करना चाहते हैं:

{"20/01/2013","10/01/2013","01/01/2013"} 

मैं इस कर सकते हैं?

उत्तर

14

LINQ के साथ:

var list = new List<string> {"01/01/2013", "10/01/2013", "20/01/2013"}; 
var orderedList = list.OrderByDescending(x => DateTime.Parse(x)).ToList(); 
+0

यदि कोई अमान्य डेटाटाइम स्ट्रिंग है तो कैसा है? क्या एक विशिष्ट स्ट्रिंग के साथ उस अमान्य डेटाटाइम को बदलने का कोई तरीका है? –

4

आप डेटा के स्ट्रिंग अभ्यावेदन उपयोग नहीं करना चाहिए - हम सब वस्तु उन्मुख दुनिया :) में रह रहे हैं

सबसे अच्छा तरीका है LINQ के माध्यम से उलटे क्रम में वास्तविक दिनांक समय वस्तुओं में इन तार बदलने और उन्हें सुलझाने के लिए होगा :

var dates = Array.ConvertAll(dateStrings, x => DateTime.Parse(x)); 
return dates.OrderByDesc(x => x); 

एक और तरीका है कस्टम छँटाई समारोह को लागू करने, this link देखना होगा।

DateAsStringComparer myComparer = new DateAsStringComparer(); 
dateStrings.Sort(myComparer); 
+0

+1 क्योंकि आप स्ट्रिंग तुलना से परेशान नहीं किया था जैसे मैं :) –

+0

वास्तव में किया था, आप लैम्ब्डा की जरूरत नहीं है, आप इसे इस तरह से कर सकते हैं -Array.ConvertAll (dateStrings, DateTime.Parse) – himanshupareek66

0

क्योंकि वे UK/AUS प्रारूप (दिन/माह/वर्ष) कर रहे हैं, तो आप उन्हें OrderByDescending का उपयोग कर सॉर्ट कर सकते हैं:

List<string> dates = new List<string>() { "01/01/2013", "10/01/2013", "20/10/2013" }; 

foreach (var date in dates.OrderByDescending(x => x)) 
    Console.WriteLine(date); 

व्यक्तिगत रूप से तो फिर तुम सिर्फ एक तरह से समारोह में उसका प्रयोग करेंगे मैं उन्हें DateTime वस्तुओं पहले करने के लिए बदल जाएगा ..

0

डब्ल्यू हाय क्या आप List<DateTime> के बजाय List<string> का उपयोग करना चाहते हैं?

List<DateTime> dates = ... 

dates.OrderByDescending(c => c).ToList(); 
+0

मुझे यकीन है कि उसके कारण थे। उदाहरण के लिए, मुझे इसकी भी आवश्यकता है। –

1

इस प्रयास करें:

List<string> s = new List<string>() { "01/01/2013", "10/01/2013", "20/01/2013" }; 
var d = s.OrderByDescending(i => DateTime.ParseExact(i, "dd/MM/yyyy", null));