2012-01-09 16 views
7

में पंक्तियों में पंक्तियों को कैसे बदलें ArrayList<Integer[]> में पंक्तियों को पंक्तियों में कैसे बदलें? उदाहरण के लिए:ArrayList <Integer[]>

ArrayList<Integer[]> arr = ArrayList<Integer[]>(); 
arr.add(new Integer[]{1,2,3}); 
arr.add(new Integer[]{4,5,6}); 

यह होना चाहिए:

[1]: 1 4 
[2]: 2 5 
[3]: 3 6 

तो ArrayList के साथ यह है असंभव है, अन्य विकल्प 2 डी डाटा स्टोर और स्तंभों के लिए पंक्तियों को बदलने के लिए क्या कर रहे हैं?

+1

दो-आयामी पूर्णांक का उपयोग क्यों नहीं करें [] []? – Manish

उत्तर

9

कुछ भी int[][] के साथ गलत? यही कारण है कि मानक दृष्टिकोण होगा:

public static void main(String[] args) { 
    int[][] table = new int[][] { { 1, 2, 3 }, { 4, 5, 6 } }; 

    // This code assumes all rows have same number of columns 
    int[][] pivot = new int[table[0].length][]; 
    for (int row = 0; row < table[0].length; row++) 
     pivot[row] = new int[table.length]; 

    for (int row = 0; row < table.length; row++) 
     for (int col = 0; col < table[row].length; col++) 
      pivot[col][row] = table[row][col]; 

    for (int row = 0; row < pivot.length; row++) 
     System.out.println(Arrays.toString(pivot[row])); 
} 

आउटपुट:

[1, 4] 
[2, 5] 
[3, 6] 


आप चाहिए उपयोग संग्रह, एक शुरुआत के रूप का उपयोग करते हैं:

List<List<Integer>> table = new ArrayList<List<Integer>>(); 
table.add(Arrays.asList(1, 4)); 
table.add(Arrays.asList(2, 5)); 
table.add(Arrays.asList(3, 6)); 
0

आप Map को आजमा सकते हैं।

की तरह,

Map<Integer, Integer[]> newMap = new HashMap<Integer, Integer[]>(); 
newMap.put(1, new Integer[]{1,4}); 
newMap.put(2, new Integer[]{2,5}); 

यह हल कर पाने के लिए,

Map<Integer, Integer[]> sortedMap = new TreeMap<Integer, Integer[]>(newMap); 
+0

हैश मैप काम नहीं करेगा - डालने का आदेश – Bohemian

+1

@ बॉहेमियन को संरक्षित रखने के लिए संरक्षित नहीं है, आप LinkedHashMap impl का उपयोग कर सकते हैं। – 4ndrew

2

आप दो छोरों का उपयोग कर सकते - इस तरह कुछ काम करना चाहिए:

ArrayList<Integer[]> res = ArrayList<Integer[]>(); 
int C = arr.get(0).length; 
int R = arr.size(); 
for (int c = 0 ; c != C ; c++) { 
    int[] row = new Integer[R]; 
    for (int r = 0 ; r != R ; r++) { 
     row[r] = arr.get(R)[c]; 
    } 
    res.add(row); 
} 
1
ArrayList<Integer[]> arr = new ArrayList<Integer[]>(); 
    arr.add(new Integer[]{1,2,3}); 
    arr.add(new Integer[]{4,5,6}); 

    ArrayList<Integer[]> res = new ArrayList<Integer[]>(); 

    int C = arr.get(0).length; 
    int R = arr.size(); 
    for (int c = 0 ; c != C ; c++) { 
     Integer[] row = new Integer[R]; 
     for (int r = 0 ; r < R ; r++) { 
      row[r] = arr.get(r)[c]; 
     } 
     res.add(row); 
    } 
3

इस समस्या को 'Matrix Transpose' कहा जाता है। आप पहले से पंक्तियों की संख्या पता है, तुम सिर्फ 2 डी मैट्रिक्स इस्तेमाल कर सकते हैं और बस स्थानांतरित, नीचे के रूप में: भले ही आप पंक्तियों या स्तंभों की संख्या पहले से पता नहीं है

Integer[][] matrix = new Integer[rows][cols]; 
//Let i = 2 (rows); j = 3 (cols) 
matrix[0] = new Integer[]{1,2,3}; 
matrix[1] = new Integer[]{4,5,6}; 

Integer[][] transposedMatrix = new Integer[cols][rows]; 

for(int i=0;i<cols;i++) { 
    for(int j=0;j<rows;j++) { 
     transposedMatrix[i][j] = matrix[j][i]; 
    } 
} 

, आप अन्य उपयोग कर सकते हैं ArrayList की तरह डेटास्ट्रक्चर और फिर उपरोक्त के समान तर्क का उपयोग करें।