Liste zum Abspreichern von Array

  • VB.NET
  • .NET (FX) 4.0

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

    Liste zum Abspreichern von Array

    Hallo,

    schon wieder ein Problem:

    rufe eine Function an, übergebe ein Array(n,n) as Double(,)
    und nun verändere ich in drei Schleifen dieses Array, sodass es jedesmal anders ist.
    nun will ich alle drei Array´s nach jedem Durchlauf in einer Liste speichern, um am Ende die Liste zum Auslesen zurückzugeben.

    Hab:

    Private function verändereA(ByVal A as double(,)) as List(Of Double(,))

    Dim liste as List(Of Double(,))=new List(Of Double(,))

    1.Schleife (For- Next)
    A(n,n) wird verändert
    liste.Insert(0,A)

    2.Schleife
    A(n,n) wird erneut verändert
    liste.Insert(1,A)

    3.Schleife
    A(n,n) wird erneut verändert
    liste.Insert(2,A)


    Return liste '----nun sind leider alle A(n,n) in der Liste.count=3! nach der letzten Veränderung (nach diesem letzten A_Durchgang) gleich.
    End Function

    Dasselbe passiert mit liste.Add(A)

    Wie kann ich erreichen, dass jedes Array für sich in der Liste auch "fixiert" wird und nicht nach jedem Durchlauf auch das in der Liste "obere" Array gleiche Werte annimmt?

    Ich danke für jegliche Hilfe

    hybernate5
    Erstell mal für jede Schleife ein eigenes Array mit dem ursprünglichen ausgangswert und schieb das dann nach der Schleife in deine Liste...
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    hi,
    danke dir, keine schlechte Idee.

    hab schon vorhin versucht tempA=A
    und dann
    liste.Insert(n, tempA),
    und weiter mit A fahren, aber das hatte nichts gebracht.

    Allerdings für jede Schleife eigenes Array zu kreiieren, ist zu umständlich (hab eigentlich 5 solche Schleifen- wollte hier nur vereinfachen!).
    Also hab noch probiert mit:
    tempA=CType(A.Clone,Double(,))
    und dann rein in die Liste- und siehe, offenbar irgendein "Schutzmechanismus" am Werke (bleibt mir schleierhaft wieso?) und alle veränderten Arrays nacheinander drin.
    So kann ich nachsehen, auf welcher Stufe ein Fehler in meiner Prozedur liegt. Ist sozusagen mein "Debugger", wenn du bedenkst, das z.B.: ein A(15,15) oder mehr ist... Da kann man sich doch nicht so einfach in die Schleife reinlegen und nach Dummheiten spähen.

    Danke für deinen Tritt in die richtige Richtung und noch einen schönen Abend. :thumbsup:

    hybernate5
    ja, arbeite mit m,n_/ und quadratischen n,n_Matrizen.

    Falls du eine Idee zu etwas hast, bitte, raus damit. Lasse mich gerne inspirieren. Bitte, aber nicht salopp dahinreden, etwas mit Hand und Fuß.

    Danke dir für dein Interesse.

    hybernate5
    Wie gesagt mach dir eine Matrix-Klasse, welche deine kompletten Matrix funktionalitäten kapselt. Wie z.B. das verändern der Elemente.
    Dann implementierst du natürlich das ICloneable interface und kopierst darin dein intern gehaltenes Array.
    Das räumt deinen Code erstmal auf und dürfte späteres Debuggen auch vereinfachen. Wirst trotzdem jedesmal ein neues Objekt anlegen.

    Oder du machst dir natürlich eine struct anstelle von einer Klasse(Sinnvoll, wenn du nicht zu viele Elemente hast) jedoch darfst du dort nur Arrays fester größe verwenden, ansonsten hast du wieder dasselbe Problem.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---