Suche die Anzahl der Elemente in mehreren Listen und kombiniere sie; entferne if / else komplex?

8

Ich habe eine Liste von Listen:

%Vor%

Die maximale Größe einer Liste beträgt fünf Zeichenfolgen. Es ist etwas wie unten:

%Vor%

Ich versuche, eine Methode zu entwickeln, um eine neue Liste einer bestimmten Größe (1-5 Elemente) zu erstellen, indem ich einige der oben geschachtelten Listen kombiniere. Ich könnte etwas wie das Folgende (in diesem Beispiel drei Elemente) tun:

%Vor%

Ich habe die Schleife nicht eingeschlossen, wenn keine Unterlisten der Größe 2 sind, um drei der Größe 1 zu finden, aber Sie können sich vorstellen, wie lang und wie hässlich es sein kann. Die Reihenfolge ist wichtig, daher werden die for-Schleifen sequentiell inkrementiert (dh ich würde lieber subList 1 + 2 mehr als 2 + 3, 1 + 3 mehr als 2 + 3 usw. kombinieren).

Ich hoffe, einen Weg zu finden, dies dynamisch zu implementieren. Ich kann nur ergründen, wie unlesbar und lang die getFive -Methode meiner derzeitigen Methodik zur Verfügung gestellt wird. Ich habe mehrere Methoden (getOne bis getFive), es muss in diesem Sinne nicht dynamisch sein, ich möchte nur eine Menge der if / else- und for-Schleifen loswerden, um die Komplexität zu reduzieren und die Lesbarkeit zu verbessern.

Ich sollte erwähnen, dass es sich um Hausaufgaben handelt, also möchte ich nicht unbedingt eine konkrete Antwort, sondern einen Anstoss in die richtige Richtung geben. Etwas modulo vielleicht? Mit Restposten zu tun?

bearbeiten; um zu verdeutlichen und ein Beispiel zu geben:

%Vor%

Die Methode getThree() erstellt eine neue Liste mit Elementen aus den Unterlisten von someList . Es kann keine Unterliste teilen (dh es kann nicht 1 Element aus einer Unterliste von 2 Elementen aufnehmen), es kombiniert ganze Unterlisten.

    
gator 28.05.2015, 23:22
quelle

3 Antworten

3

Wenn Sie fortfahren wollen, von aufeinanderfolgenden Listen zu sammeln, bis Sie 5 Elemente erhalten haben, fügen Sie sie hinzu und brechen Sie dann aus, wenn Ihre Liste voll ist:

%Vor%

Wenn Sie zuerst die größten Listen konsumieren möchten, fügen Sie diese Zeile als erste Zeile der Methode hinzu:

%Vor%

In Java 8, ziemlich knapp:

%Vor%

und mit dem größten ersten Mod:

%Vor%     
Bohemian 29.05.2015, 01:19
quelle
1

Da Sie angegeben haben, dass die Priorität der Kombination von Listen von links nach rechts ist. Eine O (N ^ 2) -Schleife ist ausreichend, um Kombinationsunterlisten so zu bearbeiten, dass sie kleiner oder gleich der gewünschten Menge sind.

%Vor%

Ergebnisse (combinateAmount = 4):

%Vor%

Ergebnisse (combineAmount = 2):

%Vor%

Ergebnisse (combineAmount = 6):

%Vor%     
Shar1er80 29.05.2015 01:17
quelle
1

Von dem, was ich verstehe, möchten Sie eine Liste von Listen in insgesamt 5 Indizes kombinieren. Wenn Sie dies tun, sollten Sie zuerst die linke Seite priorisieren.

Hier ist eine Methode, die ich dafür erstellt habe. Ich weiß, dass Sie kein bestimmtes Beispiel wollten, aber ich denke, dass ein Beispiel Ihnen helfen wird, andere zu verstehen, die diese Frage auch haben:

%Vor%

Wenn es irgendwelche Probleme mit diesem Code gibt oder Sie eine Frage haben, fragen Sie mich in den Kommentaren.

    
Forseth11 29.05.2015 02:13
quelle

Tags und Links