3 Stimmen

Ist es möglich, Schleife Eingabe in ein Array ohne Einstellung, wie groß das Array in C# ist?

Wahrscheinlich ist das eine ganz einfache Frage, aber ich kann die Antwort nirgends finden.

Ich versuche, durch die Eingabe zu schleifen und die Ergebnisse in ein Array mit C# zu setzen. Von dem, was ich gelesen habe, muss das Array die Anzahl der Elemente zuerst festgelegt haben.

Gibt es eine Möglichkeit, nur Schleife durch und haben die Array-Anzahl der Elemente abhängig von der Anzahl der Eingänge?

TIA

8voto

David Punkte 1187

Verwenden Sie eine Objekt auflisten so dass Sie hinzufügen. die Ergebnisse jeder Iteration in Ihrer Schleife in die Liste, bis Sie alle Eingaben verarbeitet haben. Dann müssen Sie die Indizes/Größen des Arrays nicht mehr verfolgen.

Les List Klasse hat eine ToArray()-Methode die Sie nach der Schleife verwenden können, wenn Sie die Ergebnisse in einem Array speichern möchten. Sie können entweder das Array aus Ihrer Methode zurückgeben oder das List-Objekt nach der Umwandlung in ein Array löschen, um zu verhindern, dass zusätzliche Kopien der Daten herumliegen.

3voto

Fernando Punkte 3999

Wenn Sie die Eingabelänge kennen, können Sie das Array mit diesem Wert initialisieren. Andernfalls sollten Sie eine Liste für eine stark typisierte Sammlung oder eine ArrayList .

Wenn Ihre Eingabe eine IEnumerable ist, können Sie mit List.AddRange um alle Werte zu addieren, ohne dass eine Schleife erforderlich ist.

Sie sollten beachten, dass List und ArrayList genau so funktionieren, wie Sie es wünschen. Wie in der Dokumentation angegeben, verwenden sie "ein Array, dessen Größe bei Bedarf dynamisch erhöht wird".

0voto

Anon. Punkte 55933

Sie möchten eine List .

0voto

Kevin Won Punkte 7056

Und noch besser, wenn möglich allgemeine Listen verwenden . Seit sie in 2.0 herauskamen, glaube ich nicht, dass ich jemals eine einfache ArrayList verwendet habe.

List<string> myNames = new List<string>();
myNames.Add("kevin");
string[] myNamesTurnedToStringArray = nyMames.ToArray();

Ich gehe noch einen Schritt weiter und stelle fest, dass ich fast jedes Mal, wenn ich eine Sammlung brauche, diese für mehr als nur ein paar einfache Aussagen benötige. Wenn Sie feststellen, dass Sie Ihre Liste überall in Ihrer Codebasis verwenden, könnten Sie die Unterklassifizierung der Liste in Betracht ziehen

public class Widgets : List<Widgets> // Widgest class defined elsewhere
{
    public Widgets() : base() {}
    public Widgets(IEnumerable<Widgets> items) : base(items) {}

    public Widget GetWidgetById(int id)
    {
        // assuming only one ID possible
        return this.Where(w => w.id == id).Single(); 
    }

    public string[] GetAllNames()
    {
        return this.Select(w => w.Name).ToArray();
    }
}

//... later in some other class ....

Widgets w = new Widgets(dataFromDatabase);
Widget customerWidget = w.GetWidgetById(customerWidgetId);
string[] allNames = w.GetAllNames();

Dies ist eine schöne OOPy Weg der Kapselung Ihrer Liste Funktionalität an einem Ort & oft ist ein guter Weg, um Ihre Anliegen organisch zu trennen.

-1voto

John Knoeller Punkte 32285

Sehen Sie sich die ArrayList Sammlung. Sie können ihr eine anfängliche Zuweisungsgröße geben, und Sie können auch Add Artikel zu.

Die Kapazität einer ArrayList ist die Anzahl der Elemente, die die ArrayList aufnehmen kann. Wenn Elemente zu einer ArrayList hinzugefügt werden, wird die Kapazität automatisch nach Bedarf durch Neuzuweisung erhöht. Die Kapazität kann durch den Aufruf von TrimToSize oder durch explizites Setzen der Eigenschaft Capacity verringert werden.

Natürlich ist es effizienter, den Speicher auf eine vernünftige Größe vorzubereiten, als ein Element nach dem anderen von 0 an hinzuzufügen - aber es wird so oder so funktionieren.

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