Items zu einem Array hinzufügen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Radinator.

    Items zu einem Array hinzufügen

    Ich habe momentan ein Problem mit Arrays : Wie kann ich ein Item zu einem Array hinzufügen ?

    Folgender Array :

    VB.NET-Quellcode

    1. Dim mouse() As System.Drawing.Point


    Folgender Code :

    VB.NET-Quellcode

    1. Dim aktuelleMouse As System.Drawing.Point
    2. aktuelleMouse.X = MousePosition.X
    3. aktuelleMouse.Y = MousePosition.Y
    4. ' Versuch Nummer 1
    5. ReDim Preserve mouse(mouse.Length)
    6. mouse(mouse.Length - 1) = aktuelleMouse
    7. ' Versuch Nummer 2
    8. Array.Resize(mouse, mouse.Length + 1)
    9. mouse(mouse.Length - 1) = aktuelleMouse


    Keine der beiden "Versuche" geht bei mir. Ich hab schon oft gegoogelt bin aber am ende nur bei den beiden gelandent,wobei davon keiner funktioniert :(

    VB.NET-Quellcode

    1. Dim aktuelleMouse As System.Drawing.Point
    2. Dim L As New List(Of Point)
    3. aktuelleMouse.X = MousePosition.X
    4. aktuelleMouse.Y = MousePosition.Y
    5. L.Add(aktuelleMouse)


    Benutze bitte die aktuellen dynamischen Arrays (in diesem Falle eine Liste) und nicht dieses steinzeitliche Zeugs.
    An manchen Tagen gibt es zu allem Überfluss auch noch Ärger!
    Das Array selbst ist nicht steinzeitlich, nur die Technik, ein Array mit festgelegter Obergrenze nachträglich zu erweitern. Das war damals schon höchst dubios, aber mangels Alternativen nicht anders zu lösen. Unter VB.NET kann man diese Technik getrost in der Gruft belassen.
    An manchen Tagen gibt es zu allem Überfluss auch noch Ärger!
    Array ist nicht Steinzeit, sondern es ist die schnellste und resourcensparendste Auflistung wo gibt.
    Array ist allerdings fixed-sized.
    Und Redim Preserve oder Array.Resize sind als unperformante Workarounds so gut wie immer fehl am Platz (dabei wird jedes mal das ganze Array umkopiert in ein neues).
    Weil wenn man eine flexible Auflistung will, nimmt man eine List(Of T)

    edit: zu spät

    Rainman schrieb:

    Das Array selbst ist nicht steinzeitlich

    List(Of T) bzw (in C#) List<T> basiert auf Arrays

    Rainman schrieb:

    Das war damals schon höchst dubios, aber mangels Alternativen nicht anders zu lösen

    Leider ja

    ErfinderDesRades schrieb:

    Weil wenn man eine flexible Auflistung will

    Wenn man sich den Code zu List(Of T) anschaut, wir beim Konstruktor auch nur ein undimensioniertes(schreibt man das so?) Array vom übergebenen Typen erzeugt und in der .Add() Sub wird zuerst die interne, private Kapazitätsvariable neu gestzt und anschließende das item zum Array hinzugefügt - Falls es wen interessiert
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Jepp - List(Of T) ist ein Wrapper um die Array-Klasse. Und werkelt intern genau mit den Dingern, die ich zuvor als Workaround abqualifizierte.
    Nur List hat ein recht intelligentes management, indem sie ihre Kapazität bei Bedarf glaub immer grad verdoppelt, sodass sie nicht bei jeder Größen-Änderung das Array redimensioniert, sondern viel viel seltener.

    Danke übrigens für den Link - das ist eine echte Alternative zu meim ILSpy

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    ErfinderDesRades schrieb:

    ihre Kapazität bei Bedarf glaub immer grad verdoppelt

    Ja, macht se in der privaten EnsureCapacity ab Zeile #432 in der Referenz

    ErfinderDesRades schrieb:

    Danke übrigens für den Link

    Bitte bitte :D

    ErfinderDesRades schrieb:

    das ist eine echte Alternative zu meim ILSpy

    Ich verwende eigentlich immer dotPeek, wollte schonlange mal ILSpy testen :Dd
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell