string[,] array dynamisch vergrößern



  • hallo,

    bin seit neuestem auf C# umgestiegen. was ich da jedoch vermisse (oder noch nicht gelernt habe), ist die danamische speicherverwaltung.
    Problematik: Angenommen, ich initalisiere eine stringarray mit

    string[,] array = new string[1,1];
    

    und will da zB eine 5x8 Matrix (wobei die Größe nicht absehbar ist) schreiben, so hätte ich in C++ die array dynamisch vergrößert. Hier weiß ich leider nicht wie???

    Kann mir jemand helfen? Wenn das doch nicht geht, gibt es Array Objekte, die mehrdimensionale arrays jeden types aufnehmen kann und dynamisch wächst???

    Danke um Hilfe,
    Gru: Garry 🙂



  • int A = 5;
    int B = 7;
    
    // A | B aendern
    
    string[,] array = new string[A,B];
    

    geht das nicht?
    amsonsten nimm ne DataTable - das geht auf jeden fall
    gehen nicht auch zwei generische listen ?

    List<List<string>> arr;
    

    weiss ich grad ausn kopf nich



  • zwei listen gehen auch nicht, da die zweite dynamisch und bei bedarf erzeugt werden müsste. ne datatable hört sich gut an, ist sie mehrdimensional dynamisch? und kann man die danach in ein string[,], event. string[,,] umkonventieren?

    Gruß,
    Garry



  • wups - gar nicht gesehen das du schon was antwortetest
    noch fragen offen ?

    eine DataTable kannst du mit DataColumn und DataRow jederzeit erweitern - beispielcode findest du in der msdn

    aber - in c++ wuerde man auch ein neues groesseres array erstellen und die elemente umkopieren um das feld dynamisch zu vergroessern
    so kannst du doch in c# auch verfahren

    // pseudo, geht bestimmt auch besser

    string[,] arr = new string[1,1]; // small array
    arr = Increase(arr, 1, 1, 5, 5); // increased array
    
    internal string[,] Increase[string[,] arrOld, int xOld, int yOld, int xNew, int yNew)
    {
        string[,] arrNew = new string[yNew,xNew];
        for(int y = 0; y < yOld; ++y)
            for(int x = 0; x < xOld; ++x)
                arrNew[y,x] = arrOld[y,x];
        return arrNew;
    }
    

Anmelden zum Antworten