mehrdimensionale arrays mit strings

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Vatter.

    mehrdimensionale arrays mit strings

    Guten abend,

    wie löse ich den am cleversten folgendes arrayproblem:

    ich habe z.b. eine liste mit unterpunkten

    eintrag1: farbe = blau, grösse = 20, dingsbums = lala
    eintrag2: farbe = rot, grösse = 30, dingsbums = blub

    Nun muss ich auf die daten folgendemassen zugreifen:

    GibMir("eintrag1","farbe") und es soll rot raus kommen.

    Das ganze muss dynamsich sein, d.h. die keys farbe, grösse können sich ändern aus grösse kann länge werden u.s.w.

    die daten werden aus einer textdatei gelesen...

    Danke, gruss
    Kann gerade kein VS benutzen, aber probier's doch mal mit einem Dictionary.

    VB.NET-Quellcode

    1. Dim Dict As New Dictionary(Of String, Dictionary(Of String, String))
    2. ' bin mir nicht sicher, ob das so funktioniert, sollte aber eigentlich
    3. Dict("eintrag1") = New Dictionary(Of String, String)
    4. Dict("eintrag1")("farbe") = "blau"
    5. Dict("eintrag1")("grösse") = "20"
    6. Dict("eintrag1")("dingsbums") = "lala"
    7. Dict("eintrag2") = New Dictionary(Of String, String)
    8. Dict("eintrag2")("farbe") = "rot"
    9. Dict("eintrag2")("grösse") = "30"
    10. Dict("eintrag2")("dingsbums") = "blub"

    Jedoch wäre die Verwendung einer Klasse mit verschiedenen Eigenschaften wohl eher geeignet.
    Allerdings ginge damit die Flexibilität verloren.

    VB.NET-Quellcode

    1. Class Eintrag
    2. Public Property Farbe As Color
    3. Public Property Groesse As Integer
    4. Public Property Dingsbums As String
    5. Public Sub New(Optional ByVal farbe_ As Color = Color.White, Optional ByVal groesse_ As Integer = 0, Optional ByVal dingsbums_ As String = Nothing)
    6. Farbe = farbe_
    7. Groesse = groesse_
    8. Dingsbums = If(dingsbums_ Is Nothing, String.Empty, dingsbums_)
    9. End Sub
    10. End Class
    11. ' Anwendung
    12. Dim Liste As New List(Of Eintrag)
    13. Liste.Add(New Eintrag(Color.Blue, 20, "lala"))
    14. Liste.Add(New Eintrag(Color.Red, 30, "blub"))
    ich hätte spontan eine Lösung wie von haiyyu vorgeschlagen.
    eigene Klasse welche ein werte-paar simposiert in eine list packen.

    bist du wirklich sicher das du eine mehrdimensionale auflistung brauchst, da dies zwar im Titel steht aber aus deinen angaben nicht heraus kommt ?
    Hallo,

    danke erstmal.

    soweit war ich auch schon, jedoch sollte alles in einer variable liegen und dynamisch sein


    In der textdatei ist der inhalt (frei erfunden)

    Auto1;Hersteller=opel; farbe=blau; kilometerstand=3942;was.weiss.ich=jajaja
    Auto33;Hersteller=smart; farbe=spinatrot; kilometerstand=321;raucherwagen=ja

    das ganze zerlege ich am anfang in die einzelteile, klappt auch gut... ich hätte nun gerne ein variable z.b. autos("auto1") ("hersteller") und es kommt opel raus.
    Es kann auch sein, das in der textdatei eine variable mit einem wert steht den ich nicht vorher kenne...daher sollte das ganze recht dynamisch sein.



    das geht übrigens nicht um autos mir ist nur gerade nix besseres als beispiel eingefallen!

    danke und gruss
    Option Strict Off und Late-Binding wäre da eine Möglichkeit.
    In C# gibt's da noch das "dynamic"-Keyword ...

    Oder du nimmst, wie ich oben beschrieben habe, ein Dictionary.
    Da es sich ümmer um Strings handelt Du köntest auch volgendes tun tun:

    VB.NET-Quellcode

    1. Class Auto
    2. List Of(Eigenschaft)
    3. Class Eigenschaft
    4. Property Name
    5. Property Wert
    6. 'geht auch ne Dictionary(String,String), vielleicht sogar besserer
    7. End Class Eigenschaft
    8. Sub AddEigenschaft(Name,Wert)
    9. Funktion GetWert(Name) As String
    10. End Class Auto


    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup: