C#: Wie kann ich die Größe eines Arrays verdoppeln?
Wie kann ich bei z.B. einem Array mit Zahlen die Größe verdoppeln und die Werte auch doppelt ausgeben? Z.B.:
int [] p = new int [3]; // Größe verdoppeln
p[0] = 5;
p[1] = 3;
p[2] = 1;
for (int u = 0; u < p.Length; p++) // 5, 3, 1 doppelt ausgeben: 5, 3, 1, 5, 3, 1
{
Console.WriteLine(p[u]);
}
6 Antworten
Geht nicht, Du musst ein neues Array erstellen.
Die generische List-Klasse tut das aber schon lange und sehr klug, bei dem Ding brauchst Du nicht auf die Größe achten.
Da du das scheinbar selber programmieren sollst, wie ich aus deinen Kommentaren entnehme, es gibt Array.Resize und du kannst ja mal spicken, wie die Entwickler das programmiert haben, indem du einen Blick in die offizielle Referenz wirfst: Array.cs
Die Datei im Browser zu navigieren ist schwierig, STRG+F kannst du in den meisten Browser benutzen, um nach Suchbegriffen zu suchen. Du findest dann Resize und musst dich aber durch weitere Methoden wühlen, bis du schließlich zu der Impementierung kommst.
Dumm gesagt, ein neues Array erstellen mit der doppelten Größe, das alte zwei mal durchgehen und die Zahlen ins neue einsetzen...
Da würde mir auch nur einfallen es neu zu initialisieren.
using System;
class Program {
static void Main() {
char[] ch = new char[10];
ch[0] = 'a';
ch[1] = 'b';
// Resize array
Array.Resize<char>(ref ch, 10);
// Set value for new elements
ch[2] = 'c';
ch[3] = 'd';
ch[4] = 'e';
ch[5] = 'f';
ch[6] = 'g';
ch[7] = 'h';
ch[8] = 'i';
ch[9] = 'j';
Console.WriteLine("New Array: "+ new string(ch));
}
} Dann benutz Array.Resize
Ein Array lässt sich nicht vergrößern, denn die Größe ist statisch fix. Du musst ein neues Array-Objekt anlegen und die Daten kopieren.
int [] p = new int [3];
p[0]= 5;
p[1]= 3;
p[2]= 1;
int[] pDouble = new int[2 * p.Length]; //Array mit doppelter Größe
for ( int u = 0; u < p.Length; u++) //Werte doppelt hinzufügen
{
pDouble[u] = p[u];
pDouble[u + p.Length] = p[u];
}
for ( int u = 0; u < pDouble.Length; u++) //doppelt ausgeben 5,3,1,5,3,1
{
Console.WriteLine(pDouble[u]);
}
ahh vergessen ich darf kein neues Array machen sondern ein Syntax finden der es "resized"