Array Vs List(of)

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von picoflop.

    Array Vs List(of)

    Moin,
    ich baue in ein Programm, in dem es um chemisches Rechnen geht, ein Periodensystem ein.
    Nun muss ich die Daten für jedes Element verfügbar machen, damit ich später damit arbeiten kann.

    Ist vllt etwas doof erklärt ...

    Im Moment mache ich das so:
    Zuerst erstelle ich eine Struktur:

    VB.NET-Quellcode

    1. Public Structure pse
    2. Public Ordnungszahl As Integer
    3. Public Atommasse As Double
    4. Public Name As String
    5. Public Aggregatzustand As String
    6. Public Info As String
    7. End Structure

    Dann erstelle ich ein Array:

    VB.NET-Quellcode

    1. Dim elemente(80) As pse


    Zum Start des Programms sollen nun Informationen für alle Elemente erstellt werden.
    z.B. so:

    VB.NET-Quellcode

    1. With elemente(0)
    2. .Ordnungszahl = 1
    3. .Name = "Wasserstoff"
    4. .Aggregatzustand = "gasförmig"
    5. .Atommasse = 1.008
    6. .Info = "Dies ist die Info von Wasserstoff."
    7. End With


    Um jetzt z.B. bei der Eingabe der relativen Atommasse das passende Element zu finden benutze ich:

    VB.NET-Quellcode

    1. For i As Integer = 0 To elemente.Length - 1
    2. If TextBox1.Text = CStr(elemente(i).Atommasse) Then
    3. MsgBox(elemente(i).Name)
    4. Else : End If
    5. Next


    Meine Frage ist, bevor ich für alle Elemente sowas erstelle, inwiefern ihr eine andere Methode (z.B. List(of T)) verwendet würdet, also wie ihr das ganze realisieren würdet.

    Da ich noch ein Anfänger würde ich mich auch freuen, wenn ihr Kritik zum Code an sich habt ... man lernt ja nie aus.

    MfG ..

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

    Hi.
    Du erstellst eine Klasse:

    VB.NET-Quellcode

    1. Public Class Bla
    2. Public Hi as String
    3. Public Sub New(Byval Hi_ as string)
    4. Hi = Hi_
    5. End Sub
    6. End Class

    Dann mit List(Of) eine Variable erzeugen:

    VB.NET-Quellcode

    1. Dim HiList as new List(Of Bla)


    Dann kannst du es so nutzen.

    VB.NET-Quellcode

    1. For i as integer = 0 to HiList.Count - 1
    2. Messagebox.show(HiList(i).Hi)
    3. End For


    Oder neue Einträge hinzufügen:

    VB.NET-Quellcode

    1. HiList.Add(New Bla("Hi"))


    Ich mag Listen + Klassen lieber.
    grüße
    Da da PSE ja ziemlich klein ist (für einen Computer!), ist es eigentlich ziemlich egal, welche Art der Speicherung du verwendet. Array, List(Of), Dictionary(Of String, Element) etc.

    Aus Gründen der Lesbarkeit würde ich Strc allerdings "Element" nennen und den Container dann halt Elemente.
    Außerdem würde ich theoretisch lieber "Class" nehmen, da man so einige kleinere Probleme vermeidet.
    Außerdem würde ich sämtliche "Suchfunktionen" in die "Listenklasse" auslagern

    bsp.:

    VB.NET-Quellcode

    1. Public Class ChemElement
    2. Public Nummer As Integer
    3. Public Name As String
    4. Public Masse As Double
    5. End Class
    6. Public Class PSE
    7. Private Shared Elemente As New List(Of ChemElement)
    8. Public Shared Sub AddElement(ByVal e As ChemElement)
    9. Elemente.Add(e)
    10. End Sub
    11. Public Shared Function ElementByMasse(ByVal masse As Double) As ChemElement
    12. Return (From e As ChemElement In Elemente Where e.Masse = masse Select e Take 1)
    13. End Function
    14. Public Shared Function ElementByMasse(ByVal masseVon As Double, ByVal masseBis As Double) As IEnumerable(Of ChemElement)
    15. Return From e As ChemElement In Elemente Where (e.Masse >= masseVon And e.Masse <= masseBis) Select e
    16. End Function
    17. End Class
    Vielen Dank für die Antworten.
    Ich werde das dann über eine Klasse realisieren.
    Das mit der Suchfunktion muss ich wohl etwas anders machen,
    da ich aus Kompatibilitätsgründen Framework 2.0 verwende und deshalb Linq nicht benutzen kann.
    Vllt steige ich dann doch lieber auf 3.5 um oder gibt es noch andere Möglichkeiten eine Suche so einfach zu gestalten?
    mir würde einfallen immer mit ner for und if zu arbeiten.
    z.b

    VB.NET-Quellcode

    1. for i as integer = 0 to bla.count -1
    2. if bla(i).name = "Name" then
    3. messagebox.show("Success")
    4. end if
    5. end for


    Oder wie stellst du dir das vor ?

    Grüße
    Naja, Aber wenn man die möglichkeit hat noch .Net2 zu nutzen, ist das immer besser. (Finde ich persöhnlich).
    Ich hab bisjetzt noch nie wirklich eine Funktion vermisst, Oder ich wusste nicht das ich sie vermisse und hab mir selbst was dazu gebaut.

    P4ym4n schrieb:

    Vllt steige ich dann doch lieber auf 3.5 um

    Wenn schon dann 4.0
    Das 4er Client profile Framework ist kleiner als das normale 3.5er FW. Außerdem ist in 4.0 schon die Parallelisierung (PLINQ) drin. DAS ist IMHO ein Killerfeature, das in Zukunft immer wichtiger wird. So kann man sich gleich dran gewöhnen.

    IMHO nimmt man entweder 2.0 (weil's viele schon haben) oder das neueste 4.0. 3.5 macht nicht mehr richtig viel Sinn.