2011-01-09 2 views
0

Ich möchte die Größe eines Arrays ändern, aber ich möchte nicht, dass alle angehängten Werte Null sind.Der effizienteste Weg zu Array.Resize mit etwas anderem als "0" als Standardwert?

Array.Resize(ref range, range.Length + grow); 

Wenn Sie davon ausgehen, dass die beigefügten Länge immer ein Vielfaches von 4 Bytes ist (gerade genug, um einen Schwimmer zu halten), was ist der beste Weg, dies mit füllen entweder float.MaxValue oder float.MinValue?

+0

Eine Schleife ist der richtige Weg, dies zu tun. Sie könnten immer mit festem Speicherzugriff auf die zugrunde liegenden Bytes herumfummeln, aber müssen Sie das wirklich? –

+0

Wissen Sie, welche Funktionen ich innerhalb dieser Schleife verwenden würde? Nur ein Zeiger kann genug sein, um mich zu starten. – LamonteCristo

Antwort

3

Einfach die hinzugefügten Objekte durchlaufen und den Wert zuweisen. Der Compiler erzeugt Code, um die Bereichsüberprüfung der Array-Indizes nur einmal außerhalb der Schleife durchzuführen, so dass die Schleife sehr effizient ist.

int oldSize = range.Length; 
Array.Resize(ref range, range.Length + grow); 
for (int i = oldSize; i < range.Length; i++) { 
    range[i] = float.MinValue; 
} 

Sie sollten sich bewusst sein, dass die Array.Resize nicht wirklich das Array die Größe, aber es schafft ein neues Array mit der gewünschten Größe und kopiert die Daten aus dem ursprünglichen Array. Wenn Sie also die Größe einer Sammlung effizient ändern möchten, sollten Sie kein Array verwenden. Je nach Ihren Anforderungen wäre etwas wie eine Liste, eine Liste von Arrays oder eine LinkedList wahrscheinlich besser.

+2

Listen verwenden Arrays als Hintergrundspeicher. Unter bestimmten Bedingungen wird Array in Listen kopiert, wenn die Größe geändert wird. –