Suchen in einem Array

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

    Suchen in einem Array

    Das Suchen von Elementen in einem Array macht mir große Sorgen, habe schon einige Lösungen ausprobiert aber noch der Index noch True oder False werden korrekt angezeigt. Mir würde eine einfache Lösung mit True und False reichen

    VB.NET-Quellcode

    1. Dim A1 As Integer() = {10, 5, 24, 16, 33, 1, 20, 14, 31, 9, 22}
    2. If Array.IndexOf(A1, 24) Then ' Array.FindOf(); Array.Exists() etc.
    3. MsgBox("Ja")
    4. Else
    5. MsgBox("Nein")
    6. End If


    Oder so !?
    Gibt es eine Lösung ?

    Code-Tags eingefügt. ~Thunderbolt

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

    Option Strict On schreib mal ganz oben hin. Dann kannst du die meisten dieser Fehlschläge nicht mehr hinkriegen und das Studio erzählt dann dasselbe wie ich:

    Array.IndexOf gibt dir einen Integer zurück, nämlich den Index des ersten Vorkommens deines gesuchten Elements oder -1, wenn nicht gefunden. Und in ein If Statement gehört nicht einfach nur ein Integer, sondern ein Boolean
    Habe doch einige Probleme:
    Beispiel:

    VB.NET-Quellcode

    1. Dim A9 As Integer() = {33, 1, 20, 14, 31, 9, 22, 18, 29, 7, 28}
    2. Dim Str3 as String = "A9"
    3. Dim ergeb as Integer
    4. ergeb = Array.IndexOf(A9, 28) ' hier wir der Wert 10 gefunden
    5. ergeb = Array.IndexOf({str3}, 28) ' hier wird der Wert nicht gefunden sondern -1 zurückgegeben


    Problem liegt wohl an der Variablen mit dem Typ

    Code-Tags eingefügt. ~Thunderbolt

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

    2024new schrieb:

    ergeb = Array.IndexOf(A9, 28) hier wir der Wert 10 gefunden
    ergeb = Array.IndexOf({str3}, 28) hier wird der Wert nicht gefunden sondern -1 zurückgegeben
    Beides korrekt.
    In {33, 1, 20, 14, 31, 9, 22, 18, 29, 7, 28} ist 28 der 11. Eintrag, der hat den Index 10. Also A9(10) = 28
    {Str3} = {"A9"}, da is wie man sieht kein 28 drin.

    Versuch mal

    VB.NET-Quellcode

    1. ​Dim Str3 as Integer() = A9
    2. Dim ergeb = Array.IndexOf(Str3, 28)
    ich weiß zwar nicht was du bezwecken willst, aber das mag vielleicht ein paar Fragen aufkommen lassen.
    Hat nicht funktioniert
    Habe den Code berichtigt:

    VB.NET-Quellcode

    1. Dim A9 As Integer() = {33, 1, 20, 14, 31, 9, 22, 18, 29, 7, 28}
    2. Dim Str3 as String =
    3. Dim ergeb as Integer
    4. str3 = A9 ' A9 steht für das Array
    5. ergeb = Array.IndexOf(A9, 28) ' hier wir der Wert 10 gefunden
    6. ergeb = Array.IndexOf({str3}, 28) ' hier wird der Wert nicht gefunden sondern -1 zurückgegeben


    Code-Tags eingefügt. ~Thunderbolt

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

    Achso deins funktioniert also?
    Hatte es so verstanden du wärst mit dem Ergebnis unzufrieden.

    A9 nennt man in diesem Zusammenhang eine Variable (Dim A9 As Integer() = {33, 1, 20, 14, 31, 9, 22, 18, 29, 7, 28})
    Das Array ist aber nun mal kein String

    Guck auch mal hier rein Grundlagen.

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

    Vielen Dank für die gutgemeinten Ratschläge.

    Mein Problem ist dieser Code Array.IndexOf(A9, 28)

    A9 steht für das Array und 28 für das suchende Element, wenn ich A9 direkt eingebe bekomme ich den richtigen Wert
    wenn ich eine Variable (String-Typ für A9 eingebe bekomme ich eine Fehlermeldung !

    Code-Tags eingefügt. ~Thunderbolt

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

    Bin wirklich kein VB-Experte;

    Die Array.IndexOf Methode steht laut Microsoft
    Sucht das angegebene Objekt und gibt den Index seines ersten Auftretens in einem eindimensionalen Array oder in einem Elementbereich im Array zurück.
    Die Schreibweise der Methode lautet Array.indexOf(Name des Array, Suchobjekt)

    in meinem Fall Array ist A9 und Suchobjekt ist 28 wobei A9 durch eine Variable ersetzt werden

    2024new schrieb:

    A9 steht für das Array und 28 für das suchende Element, wenn ich A9 direkt eingebe bekomme ich den richtigen Wert
    wenn ich eine Variable (String-Typ für A9 eingebe bekomme ich eine Fehlermeldung !
    Die Ratschläge sind nicht nur gut gemeint, sondern auch notwendig zu berücksichtigen.
    Ich habe eben geschrieben, dass A9 das ist, was wir Variable nennen,
    "A9" ist hingegen keine Variable sondern wird Wert genannt. Ist wie du selbst sagst ein Wert vom Typ String.

    Ich rate mal: Du hast was ganz anderes vor als du uns hier bisher gezeigt hast. Und mit ein paar Grundlagen, fällt es dir vielleicht einfacher uns das zu erklären.
    Ich verstehe dich nicht
    der Code Array.indexOf() ist mein Problem, in der Klammer wird das Array und das Objekt eingetragen, wenn ich dort Werte eintargen funktioniert mein Progarmm, wenn ich als Array eine Variabel mit dem Namen des Array eintrage funktioniert das Programm nicht.

    Kann sein , dass ich zu blöd bin :)
    Na offensichtlich reden wir annander vorbei.

    Überzeuge dich bitte zuerst hiervon:

    VB.NET-Quellcode

    1. Dim ergebnis = Array.IndexOf({33, 1, 20, 14, 31, 9, 22, 18, 29, 7, 28}, 28) 'Kommt 10 raus
    2. Dim ergebnis = Array.IndexOf({"blaBlub"}, 28) 'Kommt -1 raus
    Dann mach dir klar, dass in beiden Varianten keine Variable benutzt wurde. Wir haben nur Werte eingetragen.

    Jetzt nochmal beides mit Variable:

    VB.NET-Quellcode

    1. Dim var = {33, 1, 20, 14, 31, 9, 22, 18, 29, 7, 28}
    2. Dim ergebnis = Array.IndexOf(var, 28)
    3. Dim var = {"blaBlub"}
    4. Dim ergebnis = Array.IndexOf(var, 28)
    Das Ergebnis kann sich dadurch nicht ändern!

    2024new schrieb:


    VB.NET-Quellcode

    1. Dim A9 As Integer() = {33, 1, 20, 14, 31, 9, 22, 18, 29, 7, 28}
    2. Dim Str3 as String = "A9"
    3. Dim ergeb as Integer
    4. ergeb = Array.IndexOf(A9, 28) hier wir der Wert 10 gefunden
    5. ergeb = Array.IndexOf({str3}, 28) hier wird der Wert nicht gefunden sondern -1 zurückgegeben

    Array.indexOf() ist mein Problem,
    in der Klammer wird das Array und das Objekt eingetragen
    wenn ich dort Werte eintargen funktioniert mein Progarmm, wenn ich als Array eine Variabel mit dem Namen des Array eintrage funktioniert das Programm nicht.
    In der Klammer musst du ein Array eintragen. A9 ist ein Array - schau in den Code: As Integer() - deshalb funktionierts.
    Str3 ist kein Array - schau in den Code: Es ist ein String.
    Ein String ist kein Array. In einem String wird Array.IndexOf nix finden.
    Um mein Problem nochmals zu verdeutlichen hier ein weiteres Beispiel

    VB.NET-Quellcode

    1. Dim A9 As Integer() = {33, 1, 20, 14, 31, 9, 22, 18, 29, 7, 28}
    2. Dim A10 As Integer() = {36, 11, 30, 8, 23, 10, 5, 24, 16, 33, 1} von diesen Array habe ich 20
    3. Dim ergeb as Integer
    4. ergeb = Array.IndexOf(A9, 28) ' die 9 bei A9 hier

    für die 9 konnte auch eine andere Zahl stehen, deshalb eine Variable als Array
    in A9 wird 28 gefunden in A10 aber nicht, dies will ich haben

    Code-Tags eingefügt. ~Thunderbolt

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

    2024new schrieb:

    in A9 wird 28 gefunden in A10 aber nicht, dies will ich haben
    OK.
    Was nicht da ist, kannst Du nicht finden.
    Wo ist das Problem?
    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!
    Auch die 28 kann durch eine ander Zahl ersetzt werden. Nochmals.
    Ein Zufallsgenerator erzeigt Zahlen zwischen 1 und 40
    dann gibt es 20 Array mit geweils 11 unterschiedlichen Zahlen hier z.B. A9 und A10
    Es soll geprüft werden ob die durch den Generator erzeugte Zahl in den Arrays vorhanden sind und in welchem !

    2024new schrieb:

    Es soll geprüft werden ob die durch den Generator erzeugte Zahl in den Arrays vorhanden sind und in welchem !
    Pack Deine 20 Arrays in ein gemeinsames Array, in denen kannst Du dann per Index suchen.
    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!
    Oh man, um das Missverständnis auch auszuräumen: Es gibt keine Variablen für das Eintippern von Variablen als Code.
    Wie RFG sagt, willst du wohl in die Richtung:

    VB.NET-Quellcode

    1. Dim A1 = {1,28,3}
    2. Dim A2 = {0,0,0}
    3. Dim A3 = {4,4,28,4}
    4. Dim AlleArrays = {A1, A2, A3}
    5. For i = 0 To AlleArrays.Length - 1
    6. If Array.IndexOf(AlleArrays(i), 28) > -1 Then Messagebox.Show($"A{i+1} hat 28")
    7. Next

    Du benötigst eigentlich andere Strukturen, um das Problem anzugehen.
    Wenn du zum Beispiel in jedem Array auch noch eine andere Zahl suchen willst, kommst damit schon wieder nicht zu Rande.