20 Stimmen

Wie transponiert man List<List>?

Ich habe eine folgende ArrayList,

[Title,Data1,Data2,Data3]
[A,2,3,4]
[B,3,5,7]

Und diese möchte ich gerne so umwandeln,

[Title,A,B]
[Data1,2,3]
[Data2,3,5]
[Data3,4,7]

Ich bin etwas verwirrt über den Ansatz. Jeder Hinweis würde sehr geschätzt werden.

Danke.

2voto

Andreas Dolk Punkte 110776

Die Mathematik dahinter: Sie müssen transponieren die Matrix. Einfacher ist es, wenn Sie ein 2-dimensionales Array oder eine "Liste von Listen" verwenden, was bei Sammlungen so ziemlich das Gleiche ist. Eine Liste von Arrays funktioniert auch, ist aber etwas verwirrender.

Dieser wikipedia-Artikel zeigt einige Algorithmen für die Transposition.

2voto

Fergal Punkte 4884

Diese Technik wird als Transponieren bezeichnet. Beispiel für eine Implementierung.

public static MyObject [][] transpose(MyObject [][] m){
    int r = m.length;
    int c = m[r].length;
    MyObject [][] t = new MyObject[c][r];
    for(int i = 0; i < r; ++i){
        for(int j = 0; j < c; ++j){
            t[j][i] = m[i][j];
        }
    }
    return t;
}

1voto

Markus Lausberg Punkte 12030

Prüfen Sie, ob alle Listen die gleiche Größe haben.

Legen Sie die Informationen in eine Matrix (z. B. Liste mit Listenelementen), um die Anzahl der Listen und die Größe einer Liste zu ermitteln.

Erstellen Sie eine neue Matrix mit den gedrehten Größenangaben. (3x4 bis 4x3)

Implementieren Sie 2 For-Schleifen und tragen Sie die Elemente in die neue Matrix ein.

1voto

James P. Punkte 18665

Haben Sie eine feste Anzahl von ArrayLists und sind sie von fester Größe, mit zu beginnen? Wenn ja, können Sie einen int-Indexwert verwenden und jede ArrayList nacheinander in derselben Schleife verarbeiten. Sie können dann jeden Wert in eine temporäre ArrayList übertragen und dann einen Verweis auf diese in eine endgültige ArrayList für die Ausgabe platzieren.

Klingt verwirrend? Hier ist eine grobe Lösung:

ArrayList tempList = new ArrayList();
ArrayList outputList = new ArrayList();

for(index=0;index<list1.getsize();index++){
// Add null checks and other validation here
tempList.add( list1.get(index) );
tempList.add( list2.get(index) );
tempList.add( list3.get(index) );
outputList.add( tempList );
}

1voto

Peter Tillemans Punkte 34359

Wenn es sich um eine Datenmigrationsaufgabe handelt, können Sie auch eine Tabellenkalkulation verwenden, wenn diese nicht zu groß ist.

Für die Manipulation von Matrizen gibt es die jScience-Bibliothek, die eine Matrixunterstützung bietet. Für nur transponieren eine metrix wäre dies overkill, aber es hängt davon ab, was mit ihm getan werden muss.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X