2009-03-06 13 views
20

का उपयोग कर आइटमों को क्रमबद्ध करें मेरे पास आइटमों की एक श्रृंखला है और मैं उनकी एक संपत्ति को सॉर्ट करना चाहता हूं। मैं "आइटम" फ़ील्ड ["फ़ील्डनाम"] का उपयोग कर आइटम संपत्ति तक पहुंच सकता हूं। मूल्य "संपत्ति स्ट्रिंग के रूप में वापस आती है लेकिन मैं इसे एक int में डाल सकता हूं।ऑर्डरबी <>

मुझे ऑर्डरबी < पर एक नज़र था> लेकिन मुझे इसका कोई जानकारी नहीं है कि इसका उपयोग कैसे किया जाए।

उत्तर

41

स्पष्ट है कि, OrderBy जगह में सरणी सॉर्ट नहीं होगा - यह एक नया अनुक्रम जो सरणी के अनुसार क्रमबद्ध प्रतिलिपि है वापस आ जाएगी। - आप

var sorted = array.OrderBy(item => item.Fields["FieldName"].Value); 

दूसरी ओर, मैं अपनी टिप्पणी समझते नहीं है कि संपत्ति एक स्ट्रिंग के रूप दिया जाता है लेकिन आप इसे किसी पूर्णांक पर कास्ट कर सकते हैं कि: अगर वह ठीक है, तो आप कुछ की तरह चाहते हैं चींटियों को तारों को नहीं डाला जा सकता है, आपको उन्हें पार्स करना होगा। यदि आप क्या मतलब है कि, तो आप शायद चाहते हैं:

var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value)); 

यदि आप चाहते हैं कि एक सरणी के रूप में, आप ToArray() बाद में कॉल कर सकते हैं:

var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value)) 
        .ToArray(); 

वैकल्पिक रूप से आप Array.Sort इस्तेमाल कर सकते हैं अगर आप in- क्रमबद्ध करना चाहते हैं जगह, लेकिन यह कुछ हद तक गड़बड़ होगा।

+0

@skeet मुझे लगभग एक ही समस्या का सामना करना पड़ रहा है और मैंने प्रश्न भी पोस्ट किया है http://stackoverflow.com/questions/11693827/sorting-on-generic-list-after -using-toarray-method – rahularyansharma

+0

धन्यवाद, जॉन। यह जानना अच्छा है कि यह एक विनाशकारी ऑपरेशन है –

+0

उपयोगकर्ता 'ऑर्डरबी' में आपको कौन सी लाइब्रेरी शामिल करना है? – AlbatrossCafe

5

यदि आप ऑर्डरबी का उपयोग कर सकते हैं तो यह आसान होना चाहिए, निम्न का प्रयास करें। मैंने int.Parse में फेंक दिया हालांकि इस पर निर्भर करता है कि आप वास्तव में इसे कैसे क्रमबद्ध करना चाहते हैं, इसकी आवश्यकता नहीं हो सकती है।

var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value)); 
4
var sortedArray = items.OrderBy(i => i.property).ToArray(); 

आप एक सरणी नहीं करना चाहते हैं, तो आप उस बंद छोड़ सकते हैं इस स्थिति में आप एक IEnumerable <> प्रकार के आइटम होगा।

Array.Sort(theArray, delegate(Item a, Item b) { return String.Compare(a.Fields["FieldName"].Value, b.Fields["FieldName"].Value); }); 

(यह भी साथ काम करता है:

Array.Sort(theArray, (a, b) => String.Compare(a.Fields["FieldName"].Value, b.Fields["FieldName"].Value)); 

आप सी # 3 उपयोग नहीं कर रहे हैं, तो आप एक लैम्ब्डा अभिव्यक्ति के बजाय एक प्रतिनिधि का उपयोग करें:

7

एक सरणी सॉर्ट करने के लिए क्रमबद्ध विधि का उपयोग करें फ्रेमवर्क 2, जो ऑर्डरबी एक्सटेंशन नहीं करता है।)

+0

कोड की एक पंक्ति, कोई अतिरिक्त चर नहीं। यह वास्तव में जवाब होना चाहिए। – toddmo

संबंधित मुद्दे