Array mit Buchstaben als Index

  • VB.NET
  • .NET (FX) 4.0

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von 0-Plan.

    Array mit Buchstaben als Index

    Hallo

    Ich brauche ein mehrdimensionales Array, eine Struktur oder etwas ähnliches
    dessen Index nicht aus Zahlen (0 bis ...,0 bis...) sondern aus einer "Buchstaben-Zahlen Kombination" besteht.
    Jede Dimension / Unterdimension kann dabei bis zu 100 Punkte umfassen.
    Bei den "Zahlen-Buchstaben Kombination" sind auch VB-Schlüsselwörter wie "DO" oder "IN" enthalten womit eine
    Deklaration und Zuweisung eines Ineger nicht möglich ist.


    Z.B. Dimension1:

    a1
    B2
    de3
    xs3d
    33w

    .........usw.

    z.B. "B2" hat dann wieder Unterpunkte :

    df
    DR
    Fe4

    .......usw

    Das Ganze bis zu 3 Dimensionen

    Dort ist dann der eigentliche Wert (ein String) gespeichert.

    Ziel ist ein möglichst einfacher Zugriff nach dem Motto

    Button1.Text = convert.ToString(Daten(B2,DR,A1))

    oder

    Daten(a1,x2,T0) = "Die neuen Daten"

    Wie bekomme ich so was am günstigsten hin ?


    Gruß

    Ben
    Hi
    wenn du eine geschickte Abbildung der Zahlen-Buchstaben-Paare findest, ist es ggf. sinnvoll, diese in Zahlenwerte umzuwandeln.
    Ansonsten kannst du einfach auf ein Dictionary(Of TKey, TValue) zurückgreifen. Als TKey verwende eine eigene Structure, die IEquatable(Of T) implementiert und Equals(Object) sowie GetHashCode überschreibt:

    VB.NET-Quellcode

    1. Public Structure MyDataKey Implements IEquatable(Of MyDataKey)
    2. Public D1 As String
    3. Public D2 As String
    4. Public D3 As String
    5. Public Sub New(d1 As String, d2 As String, d3 As String)
    6. Me.D1 = d1
    7. Me.D2 = d2
    8. Me.D3 = d3
    9. End Sub
    10. Public Override Function GetHashCode() As Integer
    11. Return If(D1 Is Nothing, 0, D1.GetHashCode()) Xor If(D2 Is Nothing, 0, D2.GetHashCode()) Xor If(D3 Is Nothing, 0, D3.GetHashCode())
    12. End Function
    13. Public Function Equals(other As MyDataKey) As Boolean Implements IEquatable(Of MyDataKey).Equals
    14. Return D1 = other.D1 AndAlso D2 = other.D2 AndAlso D3 = other.D3
    15. End Function
    16. Public Override Function Equals(obj As Object) As Boolean
    17. If obj Is Nothing Then Return False
    18. Dim o = TryCast(obj, MyDataKey?) 'Wenn MyDataKey? nicht funktioniert (ich glaube schon, dass es das in VB.Net gab), verwende Nullable(Of MyDataKey)
    19. If o Is Nothing Then Return False
    20. Return Equals(o.Value)
    21. End Function
    22. End Structure


    Irgendwie so sollte der Schlüssel aussehen, sodass du ihn schön im Dictionary(Of MyDataKey, TValue) verwenden kannst. TValue ist der Typ deiner Daten, also wohl auch String oder irgendsowas. ;)

    @Morrison
    ich weiß nicht genau, was du da anstellen willst. So wie ich das verstehe, geht's hier um die Art, auf Daten zuzugreifen, Datenbanken sind ja eigentlich "Verwaltungssysteme", um Daten miteinander zu verknüpfen, sicher abzulegen, usw. und das TreeView ist eine Möglichkeit, Information hierarchisch zu präsentieren.

    Viele Grüße
    ~blaze~