2011-10-29 13 views
5

पर आधारित 2 डी इंटीजर सरणी को सॉर्ट करना मेरे पास 2 डी-सरणी है जिसे मैं दूसरे कॉलम के आधार पर सॉर्ट करना चाहता हूं। पहला कॉलम दूसरे कॉलम के साथ जोड़ा जाना चाहिए।कॉलम

0 10 
1 9 
2 9 
3 9 
4 15 
5 10 
6 4 
7 8 
8 11 
9 12 

मैं चाहता हूँ ऊपर 2 डी सरणी इस तरह क्रमबद्ध करना: के रूप में (2x10 मैट्रिक्स) इस प्रकार

2 डी सरणी शुरू में है

4 15 
9 12 
8 11 
0 10 
5 10 
1 9 
2 9 
3 9 
7 8 
6 4 

अब, मैं कोशिश की है इस कोड में Sort a two dimensional array based on one column: से जवाब अनुकूल

Arrays.sort(theArray, new Comparator<Integer[]>() 
{ 
    @Override 
    public int compare(Integer[] int1, Integer[] int2) 
    { 
     Integer numOfKeys1 = int1[1]; 
     Integer numOfKeys2 = int2[1]; 
     return numOfKeys1.compareTo(numOfKeys2); 
    } 
}); 

हालांकि, यह सरणी सॉर्ट करने के लिए प्रतीत नहीं होता बिलकुल। सॉर्ट() फ़ंक्शन को कॉल करने के बाद सरणी को प्रिंट करते समय सरणी प्रारंभिक क्रम में होती है।

मैंने यहां से जवाब को अपनाने का भी प्रयास किया: sorting 2D array of String in java लेकिन मुझे एक ही समस्या का सामना करना पड़ा।

क्या मैंने इन समाधानों को अपनाने के दौरान कुछ घातक गलती की है, या मेरा कोड काम करना चाहिए?

इसके अलावा, मैं इस सरणी को अवरोही क्रम में क्रमबद्ध करने के बारे में कैसे जाउंगा? क्या मैं इस पंक्ति के साथ तुलना() में वापसी विवरण को प्रतिस्थापित करूंगा?

return -numOfKeys2.compareTo(numOfKeys1); 

किसी भी मदद की सराहना की जाएगी। धन्यवाद!

संपादित करें: यह देखने के लिए कि क्या समस्या कहीं और है, बस मेरे बाकी कोड पोस्ट कर रहा है।

public void Sort() 
{ 
    Integer[][] theArray = {{0,10},{1,9},{2,9},{3,9},{4,15},{5,10},{6,4},{7,8},{8,11},{9,12}};; 

    dump(theArray); 
    Arrays.sort(theArray, new Comparator<Integer[]>() 
    { 
     @Override 
     public int compare(Integer[] int1, Integer[] int2) 
     { 
      Integer numOfKeys1 = int1[1]; 
      Integer numOfKeys2 = int2[1]; 
      return numOfKeys1.compareTo(numOfKeys2); 
     } 
    }); 

    System.out.println("===="); 
    dump(theArray);  
} 

public void dump(Integer[][] array) 
{ 
    for(int p = 0, q = 10; p < q; p++) 
    { 
     System.out.println(array[p][0] + " " + array[p][1]); 
    } 
} 

संपादित करें 2:

मैं काम कर रहा यह मिल गया है। आपकी मदद के लिए सभी को शुक्रिया। मेरे पास एकाधिक सॉर्ट() फ़ंक्शंस (एक पुराना व्यक्ति जो काम नहीं कर रहा था, और जिसे आप ऊपर देखते हैं) था, और यह पता चला कि मैं गलत कह रहा था, भले ही मैंने सोचा कि मैंने कॉल बदल दिया है। उन दिनों में से सिर्फ एक।

यदि आप किसी सरणी को सॉर्ट करना चाहते हैं तो ऊपर दिए गए कोड का उपयोग करने के लिए स्वतंत्र महसूस करें। यह अब पूरी तरह से काम कर रहा है।

+0

वह कोड नहीं चलना चाहिए; सरणी की सरणी में एक एकल सरणी होती है जिसमें दो तत्व तत्वों के समूह होते हैं, जब आप इसे प्रिंट करते हैं तो आप इसे दो दस-तत्व सरणी के सरणी के रूप में देख रहे हैं। –

+0

आप सही हैं, मैं अपने सूचकांक मिश्रित कर रहा था। मुझे सही करने के लिए धन्यवाद। और आपकी मदद के लिए धन्यवाद। – Drake

उत्तर

1

यह मेरे लिए ठीक काम करता है। ऑर्डर को रिवर्स करने के लिए आप मूल compareTo, या वेरिएबल्स को स्वैप कर देंगे, लेकिन दोनों नहीं।

हमें शायद यह समझने के लिए शेष कोड देखने की आवश्यकता होगी कि आप जो देख रहे हैं उसे क्यों देख रहे हैं; मैंने आपके कोड वर्बैटिम को काट और चिपकाया, इसलिए हालात कहीं और अच्छे हैं।


dump(theArray); 
Arrays.sort(theArray, new Comparator<Integer[]>() { 
    public int compare(Integer[] int1, Integer[] int2) { 
     Integer numOfKeys1 = int1[1]; 
     Integer numOfKeys2 = int2[1]; 
     return numOfKeys1.compareTo(numOfKeys2); 
    } 
}); 
System.out.println("================"); 
dump(theArray); 


0 10 
0 10 
1 9 
2 9 
3 9 
4 15 
5 10 
6 4 
7 8 
8 11 
9 12 
================ 
6 4 
7 8 
1 9 
2 9 
3 9 
0 10 
0 10 
5 10 
8 11 
9 12 
4 15 
+0

मेरे सॉर्ट() फ़ंक्शन का परीक्षण करने के लिए धन्यवाद। मैं अब अपना बाकी कोड पोस्ट करूंगा। – Drake

+0

अच्छा स्पष्टीकरण। – gurubelli

1

कोड मेरे लिए बहुत काम करता है। गन्दा कोड के लिए खेद है, मुझे एक त्वरित परीक्षण करना पड़ा। सादर!

import java.util.*; 

class arraysort { 

    public static Integer[][] mysort(Integer[][] ar) { 
     Arrays.sort(ar, new Comparator<Integer[]>() { 
      @Override 
      public int compare(Integer[] int1, Integer[] int2) { 
       Integer numOfKeys1 = int1[1]; 
       Integer numOfKeys2 = int2[1]; 
       return numOfKeys1.compareTo(numOfKeys2); 
      } 
     }); 
     return ar; 
    } 

    public static void main(String[] s) { 
     Integer[][] myarr = {{0, 10}, {1, 9}, {2, 9}, {3, 9}, {4, 15}, {5, 10}, {6, 4}}; 

     for (Integer[] i : myarr) { 
      System.out.println(i[0] + "," + i[1]); 
     } 

     myarr = mysort(myarr); 

     for (Integer[] i : myarr) { 
      System.out.println(i[0] + "," + i[1]); 
     } 
    } 
} 
+0

धन्यवाद, कार्यक्रम अब काम कर रहा है। – Drake

0

मैंने भी आपका कोड पूरी तरह से चलाया और यह काम किया ...एक बात हालांकि मैं क्योंकि अन्यथा यह सीमा अपवाद से बाहर एक सरणी सूचकांक देता है कोड को चलाने के लिए

System.out.println(array[p][0] + " " + array[p][1]); 

साथ

System.out.println(array[0][p] + " " + array[1][p]); 

को बदलने के लिए किया था।

तुलना को नकारात्मक करना मूल्यों को स्वैप करने से आसान है और आसान परिवर्तन की अनुमति देता है।

+0

धन्यवाद, मेरे सूचकांक मिश्रित किए गए थे। मुझे अब अपना प्रोग्राम मिल गया है। – Drake