String-Array dynamisch befüllen?

  • Allgemein

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Programmer85.

    String-Array dynamisch befüllen?

    Guten Morgen!
    Ich steht vor einem kleinem Problem, für das ich nach einer sauberen Lösung suche. Ich hab ein zweidemonsionales String Array, von dem noch nicht feststeht, wie viel Speicher hierfür reserviert werden soll. Dies entscheidet sich erst nach dem Durchlauf einer Schleife. Jedoch soll während des Schleifendurchlaufs dieses Array befüllt werden. ReDim Preverse ist hier nicht erfolgsversprechend, weil die erste Dimension bekanntlich nicht geändert werden kann.

    Klar wäre es möglich, einfach 1000 Felder zu reservieren und nach dem Schleifendurchgang das Array wieder zu killen und die belegten Felder in ein anderes Feld auszulagern. Allerdings erscheint mir dieser Lösungsweg etwas dahingeschmiert.

    Liebe Grüße
    Programmer85

    Programmer85 schrieb:

    das gleiche wie

    Wenn es das gleiche wäre, würde es ja nicht anders aussehen ;)
    Es erfüllt aber den gleichen Zweck. Genaugenommen ist es jetzt kein zweidimensionales Array, sondern ein eindimensionales Array aus eindimensionalen Arrays.

    Wie gesagt ... List(Of Irgendwas()) wäre vermutlich besser.

    Nachtrag: Mit etwas "um die Ecke" denken, kommt man übrigens auch für 2-dim Arrays auf eine einfache Lösung ;)

    Dim a(,) As Integer
    Redim a(Zeilen, Spalten) -> geht dann schief, wenn die Anzahl Zeilen sich ändert
    besser also
    Redim a(Spalten, Zeilen) -> natürlich nur, wenn zumindest die spaltenanzahl sich nie ändert!
    OK!
    Vielen dank für deine Hilfe.

    Ich bin dann doch den folgenden kleinen Umweg gegangen:

    VB.NET-Quellcode

    1. Public Sub myReDim(ByRef StrArray(,) As String, ByVal iNewX As Integer, ByVal iNewY As Integer)
    2. Dim strTempArr(,) As String
    3. Dim i As Integer
    4. Dim x As Integer
    5. strTempArr = StrArray
    6. ReDim StrArray(iNewX, iNewY)
    7. For i = LBound(strTempArr, 1) To UBound(strTempArr, 1)
    8. For x = LBound(strTempArr, 2) To UBound(strTempArr, 2)
    9. If i <= iNewX And x <= iNewY Then
    10. StrArray(i, x) = strTempArr(i, x)
    11. End If
    12. Next x
    13. Next i
    14. End Sub


    Wenn es etwas eleganter geht, wäre ich über einen weiteren Tipp dankbar!