List of String Vector Syntax

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Peter329.

    List of String Vector Syntax

    Hi,

    ich habe eine Liste von zwei dimensionalen String Vektoren:

    VB.NET-Quellcode

    1. Dim CutList As New List(Of String(,))


    Ich möchte nun in dieser Liste einen Vektor hinzufügen:

    VB.NET-Quellcode

    1. CutList.Add("a", "b") 'does not work
    2. Dim entry(,) As String
    3. entry = {"a", "b"} 'does not work
    4. CutList.Add(entry)


    Irgendwie krieg ich die Syntax nicht "gebacken" ...

    Kann mir jemand freundlich auf die Sprünge helfen ?

    LG
    Peter
    @Peter329 Du willst ein Array instanziieren:

    VB.NET-Quellcode

    1. Dim CutList As New List(Of String(,))
    2. CutList.Add({{"a", "b"}, {"", ""}})
    3. CutList.Add({{"a"}, {"b"}})

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke !

    Das mit der doppelten geschweiften Klammer hab ich irgendwie nicht geschnallt ... :)

    Jetzt habe ich aber doch noch eine Frage:

    Wie kriege ich denn aus dem Array die Elemente (also die Strings "a" und "b") wieder heraus ?

    VB.NET-Quellcode

    1. Dim strRef As String = CutList(i)(0))
    2. Dim StrText As String = CutList(i)(1))


    So geht es leider nicht ...

    LG
    Peter

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Peter329“ ()

    @Peter329 So was:

    VB.NET-Quellcode

    1. Dim item = CutList(0)
    2. MessageBox.Show(item(0, 0))
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    So hab ich das jetzt hinbekommen:

    VB.NET-Quellcode

    1. Dim entry As String(,) = CutList(i)
    2. Dim strRef As String = entry(0, 0) 'liefert das erste Element
    3. Dim strText As String = entry(0, 1) 'liefert das zweite Element


    Das funktioniert - aber ich frage mich WARUM !

    Wieso muss ich denn hier zwei Koordinaten angeben ? "entry" hat doch nur EINE Dimension !

    So hätte ich das vermute - aber es funktioniert nicht !

    VB.NET-Quellcode

    1. Dim entry As String(,) = CutList(i)
    2. Dim strRef As String = entry(0) 'Syntax Fehler
    3. Dim strText As String = entry(1) 'Syntax Fehler


    Irgendwas verstehe ich hier wohl grundlegend falsch ...

    LG
    Peter

    Peter329 schrieb:

    Wieso muss ich denn hier zwei Koordinaten angeben ?
    Weil Du eine List(Of String(,)), und da brauchst Du einen Index für das Element vor dem Komma und einen für das Element nach dem Komma.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hmm ... aber entry ist doch nur ein Vektor und keine Liste !

    VB.NET-Quellcode

    1. Dim entry As String(,)


    Mit anderen Worten, entry enthält genau ZWEI Strings.

    Also ich verstehe das leider immer noch nicht, wieso ich da zwei Koordinaten brauche ! Möglicherweise habe ich die falsche Vorstellung von der Definition "String(,)" ...

    LG
    Peter
    Auf den ersten Blick kann so eine String(,) recht verwirrend sein.
    Genau so auch eine Jagged string()().

    Hier ein Beispiel das hoffentlich einigermassen erklärt wie der Umgang ist
    mit einer ListOfT und einer String(,)

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Public Module Module1
    4. Public Sub Main()
    5. 'Das ist die Standard Initialisiserung und Instanzierung einer
    6. 'ListOfT.
    7. Dim CutList1 As New List(Of String(,))
    8. 'Wenn weitere Strings-Item (Of String(,)) rein kommen, dann
    9. 'kann man es sicher so machen wie RFG gezeigt hat. Das ist legitim.
    10. '>>>> ist vom Grundprizip ein Object (!!) das nachher zu
    11. ' einem String(,) konvertiert wrd.
    12. Dim tmp1 = {{"abc"}, {"def"}}
    13. CutList1.Add({{"abc"}, {"def"}})
    14. 'oder wie ich es persönlich für den ersten Blick
    15. 'verständlicher finde. (Hinzufügen weiterer Items)
    16. 'So ist es klar ein String(,), also kein Int32(,)
    17. 'und auch kein Byte(,) oder Short(,)
    18. Dim tmp2 = New String(,) {{"ghi"}, {"jkl"}}
    19. CutList1.Add(tmp2)
    20. 'oder gleich direkt (Hinzufügen weiterer Items)
    21. CutList1.Add(New String(,) {{"mno"}, {"pqr"}})
    22. 'Weiter kann man solche sachen auch mit einer Array machen
    23. Dim tmp3 = {New String(,) {{"abc"}, {"dfg"}}, _
    24. New String(,) {{"ghi"}, {"jkl"}}, _
    25. New String(,) {{"mno"}, {"pqr"}}}
    26. Dim CutList2 As New List(Of String(,))(tmp3)
    27. 'oder wenn alles gleich auf der List aufgebaut werden soll
    28. Dim CutList3 As New List(Of String(,)) From {New String(,) {{"abc"}, {"dfg"}}, _
    29. New String(,) {{"ghi"}, {"jkl"}}, _
    30. New String(,) {{"mno"}, {"pqr"}}}
    31. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    32. 'Um den ganzen Item wieder herauszuholen
    33. Dim abcdefg = CutList3(0) 'Das entsprich also einer String(,)
    34. Dim ghijkl = CutList3(1)
    35. Dim mnopqr = CutList3(2)
    36. 'Um die einzelnen Werte aus der String(,) zu holen, muss man
    37. 'auch nach dem String(,)-Prinzip vorgehen. Jagged-Arrays wären
    38. 'da wiederum anders
    39. Dim abc = abcdefg(0, 0)
    40. Dim dfg = abcdefg(1, 0)
    41. Dim ghi = ghijkl(0, 0)
    42. Dim jkl = ghijkl(1, 0)
    43. Dim mno = mnopqr(0, 0)
    44. Dim pqr = mnopqr(1, 0)
    45. 'genau so wen man mit der ListOfT direkt arbeitet
    46. abc = CutList1(0)(0, 0) ' CutList1(0) ist das Item String(,)
    47. dfg = CutList1(0)(1, 0) ' (1, 0) ist das Adressat nach String(,)-Prinzip
    48. ghi = CutList1(1)(0, 0)
    49. jkl = CutList1(1)(1, 0)
    50. mno = CutList1(2)(0, 0)
    51. pqr = CutList1(2)(1, 0)
    52. End Sub
    53. End Module



    Edit @Peter329 meinst du den Vector von C++ oder den Vector der Mathematik?

    Eventuell reicht ja für dich schon so was

    VB.NET-Quellcode

    1. Public Sub Main()
    2. 'Möglichkeit 1
    3. Dim v As New List(Of VecString)
    4. v.Add(New VecString With {.a = "abc", .b = "def"})
    5. v.Add(New VecString With {.a = "ghi", .b = "jkl"})
    6. v.Add(New VecString With {.a = "mno", .b = "pqr"})
    7. Dim v0 = v(0)
    8. Dim v1 = v(1)
    9. Dim v2 = v(2)
    10. Dim abc = v(0).a
    11. Dim def = v(0).b
    12. Dim ghi = v(1).a
    13. 'Möglichkeit 2
    14. Dim lst As New List(Of String())
    15. lst.Add(New String() {"a", "b"})
    16. lst.Add(New String() {"c", "d"})
    17. lst.Add(New String() {"e", "f"})
    18. Dim ab = lst(0)
    19. Dim cd = lst(1)
    20. Dim ef = lst(2)
    21. Dim a = lst(0)(0)
    22. Dim b = lst(0)(0)
    23. Dim c = lst(1)(0)
    24. ' ....
    25. Stop
    26. End Sub
    27. Public Class VecString
    28. Public a As String
    29. Public b As String
    30. End Class



    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „exc-jdbi“ ()

    Peter329 schrieb:

    Mit anderen Worten, entry enthält genau ZWEI Strings.
    Nein.
    entry enthält ein zweidimensionales String-Array.
    Wie bei einem Schachbrett hast Du Zeilen und Spalten, und für jedes brauchst Du einen Index.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also erst mal vielen Dank für eure Ratschläge. Da hatte ich tatsächlich eine vollkommen falsche Vorstellung von String(,) ... :)

    Ich habe jetzt einfach eine "structure" definiert und damit eine List(of ... ) gebildet. Das funktioniert dann in meinem Fall hervorragend !

    Daumen hoch, Problem gelöst !

    LG
    Peter