2011-03-25 20 views
42

मेरे पास int की एक सरणी है जिसे मुझे अवरोही से क्रमबद्ध करना है।अवरोही क्रम में सरणी को सॉर्ट करने का बेहतर तरीका

जब से मैं order.Currently उतरते मैं

int[] array = new int[] { 3, 1, 4, 5, 2 }; 
Array.Sort<int>(array); 
Array.Reverse(array); 

अब नीचे के रूप में अवरोही क्रम में सरणी छँटाई कर रहा हूँ में सरणी सॉर्ट करने के लिए कोई भी तरीका नहीं मिला, सवाल that.Is कोई बेहतर तरीका है सी # में ऐसा करने के लिए?

उत्तर

46

सॉर्ट क्रम के आधार पर आप यह कर सकते हैं:

int[] array = new int[] { 3, 1, 4, 5, 2 }; 
    Array.Sort<int>(array, 
        new Comparison<int>(
          (i1, i2) => i2.CompareTo(i1) 
        )); 

... या इस:

int[] array = new int[] { 3, 1, 4, 5, 2 }; 
    Array.Sort<int>(array, 
        new Comparison<int>(
          (i1, i2) => i1.CompareTo(i2) 
        )); 

i1 और i2 बस उलट कर रहे हैं।

+9

यह, या सिर्फ एक '-' (ऋण चिह्न) को जोड़ने से पहले' CompareTo' – digEmAll

+0

@digEmAll: बिल्कुल;) – JYL

+10

या बस 'Array.Sort (सरणी, (ए, बी) => बी। कॉम्पारे (ए))' एक रिवर्स सॉर्ट के लिए। –

2

हां, आप सॉर्ट करने के लिए भविष्य को पारित कर सकते हैं। यह आपका रिवर्स कार्यान्वयन होगा।

2

आप Array.Sort में पैरामीटर के रूप में तुलनात्मक (IComparer कार्यान्वयन) निर्दिष्ट कर सकते हैं, सॉर्टिंग का क्रम वास्तव में तुलनात्मक पर निर्भर करता है। डिफ़ॉल्ट तुलनाकर्ता आरोही क्रम में

52

LINQ OrderByDescending विधि का उपयोग करें। यह IOrderedIEnumerable<int> देता है, यदि आपको इसकी आवश्यकता हो तो आप वापस ऐरे में परिवर्तित कर सकते हैं। आम तौर पर, List<> एस अधिक कार्यात्मक होते हैं तो Array एस।

array = array.OrderByDescending(c => c).ToArray(); 
+1

आपने मुझे इसे हराया! :) –

+5

यह एक छोटा कामकाजी कोड है, लेकिन यदि सरणी बड़ी है, तो यह बहुत ही कुशल नहीं है (प्रदर्शन अवधि में), क्योंकि सरणी को पहले सूची में परिवर्तित किया जाता है, फिर क्रमबद्ध किया जाता है, और अंत में सरणी में परिवर्तित किया जाता है। क्या मै गलत हु ? – JYL

+0

@ इलुशा, यदि समग्र वस्तुओं (सामान्य वस्तुओं नहीं) के परिप्रेक्ष्य से 'int' पर विचार करें, तो 'int' यह अन्य की तरह एक ही वस्तु है, क्योंकि दो वस्तुओं में से किसी एक को आपको पहले अंतर तक तुलना करने की आवश्यकता है, इसलिए ओ (एन) यह है असंभव परिणाम –

9

निश्चित रूप से, आप इस प्रकार को अनुकूलित कर सकते हैं।

आपको सॉर्ट() को एक प्रतिनिधि विधि को तुलना करने की आवश्यकता है जो इसे सॉर्ट करने के लिए उपयोग करेगा।

एक गुमनाम पद्धति का उपयोग करना:

Array.Sort<int>(array, 
delegate(int a, int b) 
    { 
    return b - a; //Normal compare is a-b 
    }); 

इसके बारे में और अधिक पढ़ें:

Sorting arrays
MSDN - Array.Sort Method (T[], Comparison)

+1

ओवरफ्लो के मामले में यह सही तरीके से काम नहीं करेगा। – Henrik

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