Array in Stücke von X Länge aufteilen

9

Momentan habe ich ein Array der Größe N. Ich versuche, jede X Menge von Bytes aus dem Array zu kopieren.

Beispiel, wenn das Array Größe 10 ist und ich Arrays der Größe 3 möchte. Ich würde die ersten 3 Elemente dann die nächsten 3 und die letzte 1 kopieren.

Zur Zeit verwende ich den folgenden Algorithmus:

%Vor%

Gibt es einen effizienteren oder vernünftigeren Weg, um das zu tun, was ich will? Dieser Algorithmus sieht ziemlich schlecht aus = l

Irgendwelche Ideen, wie ich es verbessern kann oder zumindest einen Hinweis?

    
Brandon 08.10.2013, 01:01
quelle

8 Antworten

9

Was ist damit?

%Vor%     
arshajii 08.10.2013, 01:05
quelle
6

Hier ist eine bequeme Methode , die ein byte[] in ein Array von byte[] konvertiert. Das Ergebnis ist also byte[][] .

%Vor%

Einige Vorteile gegenüber der vorherigen besten Antwort :

  1. Die Bedingung for verwendet <= , was mehr Sinn macht als < ... + 1 .
  2. Wenn Sie den stop-index in ein temporäres Feld setzen, wird die Anzahl der Berechnungen im letzten if -Block reduziert.

(Einheit getestet)

    
bvdb 24.08.2015 09:43
quelle
2

Wenige Dinge zu tun hier:

Erstens, häufige Konventionen, die apon nicht mit Großbuchstaben zum Starten von Variablennamen missfallen, ändern die Variablen I und NewArray in 'i' bzw. 'newArray'.

Dann funktioniert Ihr Code nicht, weil Ihr erstes Mal durch die Schleife i-3 zu einer IndexOutOfBounds-Ausnahme führen wird .....

Schließlich zeigen Sie nicht, wie Sie die Größe des newArray-Arrays festlegen.

%Vor%     
rolfl 08.10.2013 01:26
quelle
2

Hier ist meine Implementierung, die Ihr Array in Sub-Arrays bis zu einer maximalen Größe teilt, für die Sie sich entscheiden, und die Sub-Arrays in eine Liste von Arrays einfügen. Das letzte Array wird kleiner, wenn die Größe des Arrays kein Vielfaches der gewählten Maximalgröße ist.

%Vor%     
Gubatron 22.01.2015 22:10
quelle
0

Sie können split mit einem speziellen regulären Ausdruck verwenden:

%Vor%

Kredit zu früheren Post von Alan Moore. Bitte besuchen Sie und stimmen Sie ab.

    
henderso 08.10.2013 01:11
quelle
0

Wenn Sie tatsächlich ziemlich große Blöcke benötigen und ihre Inhalte nicht unabhängig voneinander ändern möchten, sollten Sie dasselbe Ausgangsarray mithilfe von ByteBuffer.wrap() und dann slice() wiederholt verwenden. Dies würde unnötiges Kopieren und Speicherverschwendung verhindern.

    
leventov 08.10.2013 06:47
quelle
0

Hier ist eine Funktion zum Teilen von Arrays, die Sie unter der Hauptmethode testen können.

%Vor%

Testmethode:

%Vor%     
Evan Hu 07.05.2015 08:19
quelle
0
%Vor%     
Splash 15.03.2017 10:01
quelle

Tags und Links