Announcement

Collapse
No announcement yet.

Suchen: 6 Werte unter 10 Werten, inkl. doppelte Werte?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Suchen: 6 Werte unter 10 Werten, inkl. doppelte Werte?

    moien,

    ich würde gerne wissen, wo man am besten eine suchfunktion macht, bzw überhaupt macht.

    ich habe nun gewisse werte in einer sammlung (collection), wo es doppelte geben kann, und will diese mit einer sammlung mit werten vergleichen.

    z.b.

    1. sammlung
    10, 20, 10, 40, 30, 20, 10

    2. sammlung
    50, 20, 40, 10, 60, 30, 10, 20, 70, 30, 10

    ich würde nun gerne als bedingung haben, dass alle werte aus sammlung 1 in sammlung 2 sein müssen, aber die reihenfolge ist egal.

    das problem ist, ich weiss nicht wie das geht, dass wenn er zb den wert 10 aus S1 in S2 gefunden hat, den wert 10 aus s2 überspringt, tilgt, auslässt, löscht, etc, weil sonst bei der nöchsten 10 aus S1 die suche nur bis zur ersten 10 in S2 geht und damit findet er die eigentlich abzufagende nächste 10 nicht.

    kann mir dazu jemand einen tipp geben, wo ich dazu was finden kann? google hat mir nichts ausgespcukt und ob es dazu schon einen konkreten befehl gibt weiss ich halt nicht.

    grüße, Andreas

  • #2
    Hallo,

    die wichtigste Information fehlt in der Frage: Wo soll die Suche ablaufen? Direkt in der Datenbank (in welcher?) oder im Programm? Wenn die Suche im Programm ablaufen soll, wo werden die Sammlungen gespeichert? Wenn beide Sammlungen als separate DataTable-Instanzen in einem DataSet gespeichert werden, könnte man folgendes machen:

    1. In einer Schleife werden alle Einzelwerte aus der 1. DataTable ausgelesen.
    2. In jedem Schleifendurchlauf wird die Select-Methode der 2. DataTable aufgerufen, um zu prüfen, ob der aktuelle Schleifenwert in der 2. Sammlung enthalten ist.

    Comment


    • #3
      Originally posted by Andreas Kosch View Post
      Hallo,

      die wichtigste Information fehlt in der Frage: Wo soll die Suche ablaufen? Direkt in der Datenbank (in welcher?) oder im Programm? Wenn die Suche im Programm ablaufen soll, wo werden die Sammlungen gespeichert? Wenn beide Sammlungen als separate DataTable-Instanzen in einem DataSet gespeichert werden, könnte man folgendes machen:

      1. In einer Schleife werden alle Einzelwerte aus der 1. DataTable ausgelesen.
      2. In jedem Schleifendurchlauf wird die Select-Methode der 2. DataTable aufgerufen, um zu prüfen, ob der aktuelle Schleifenwert in der 2. Sammlung enthalten ist.
      also eine richtige datenbank habe ich nicht , bzw will ich erstmal garnicht einbauen.

      die drei zu vergleichenden wertegruppen bau ich so ein. also soll der halt einfach nur eine collection mit mehreren anderen collections vergleichen, mehr nicht. also kein db wie mysql,access,etc. alles im vb.net programm.

      grüße, Andreas

      Comment


      • #4
        Hallo!

        Du koenntest die Collection zB mit For each und Contains durchsuchen.

        Code:
        Dim col1 As Collection = New Collection(), col2 As Collection = New Collection()
        For item1 As Integer = 1 To 10
            col1.Add(item1, item1.ToString())
        Next
        For item2 As Integer = 1 To 20 Step 2
            col2.Add(item2, item2.ToString())
        Next
        For Each colItem As Object In col1
            If col2.Contains(colItem.ToString()) Then
                System.Diagnostics.Debug.WriteLine(String.Format("{0} ist in Collection2 enthalten", colItem))
            Else
                System.Diagnostics.Debug.WriteLine(String.Format("{0} ist NICHT in Collection2 enthalten", colItem))
            End If
        Next
        HTH
        *-- robert.oh. --*

        Comment


        • #5
          hi,

          also ich habe vorher das hier und lasse mir von vektoren die winkel zueinander berechnen.

          'winkel
          For i = 1 To betrag.Count
          For j = 1 To betrag.Count
          If i <> j Then
          If ((strecken_x(i) + strecken_y(i)) + (strecken_x(j) + strecken_y(j))) <> 0 Then 'filtert die vektoren raus, die nur gegen gerichtet sind (180grad), somit kein n.def bei acos
          alpha.Add(acos((strecken_x(j) * strecken_x(i) + strecken_y(j) * strecken_y(i))/(betrag(j)*betrag(i)))*180/pi)
          werte.add(betrag(i))
          End If
          End If
          Next
          Next

          nun würdich gerne diese in alpha() gespeicherten werte mit anderen werten aus anderen collections vergleichen. da ich doppelte winkel kriege (weil ich jeden winkel mit jedem anderen rechnen lasse und dadurch auch doppelte winkel entstehen) müssen die von der anzahl her auch im vergleichs collection drin sein, also sowohl als wert als auch anzahl. das einzige, was sich ändert ist die reihenfolge, an welcher position das ist.


          grüße, Andreas

          Comment


          • #6
            Originally posted by robert.oh. View Post
            Hallo!

            Du koenntest die Collection zB mit For each und Contains durchsuchen.

            Code:
            Dim col1 As Collection = New Collection(), col2 As Collection = New Collection()
            For item1 As Integer = 1 To 10
                col1.Add(item1, item1.ToString())
            Next
            For item2 As Integer = 1 To 20 Step 2
                col2.Add(item2, item2.ToString())
            Next
            For Each colItem As Object In col1
                If col2.Contains(colItem.ToString()) Then
                    System.Diagnostics.Debug.WriteLine(String.Format("{0} ist in Collection2 enthalten", colItem))
                Else
                    System.Diagnostics.Debug.WriteLine(String.Format("{0} ist NICHT in Collection2 enthalten", colItem))
                End If
            Next
            HTH

            hi,

            wird da auch die anzahl berücksichtigt, oder wird nur abgefragt, ob es vorhanden ist?

            ich brauch halt die abfrage der zahen und der anzahl dieser zahl

            als ablauf stell ich mir das so vor.

            beginnend:
            1. sammlung
            10, 20, 10, 40, 30, 20, 10

            2. sammlung
            50, 20, 40, 10, 60, 30, 10, 20, 70, 30, 10

            ertse abfrage:
            1.S
            10
            2.S
            50->20->40->10 gefunden, lösche eintrag und gehe zu nächstem 1.S wert

            zweite abfrage:
            1.S
            10->20
            2.S
            50->20 gefunden, lösche eintrag und gehe zu nächstem 1.S wert

            dritte abfrage
            1.S
            10->20->10
            2.S
            50->(20 gelöscht)->40->(10 gelöscht)->60->30->10 gefunden, lösche eintrag und gehe zu nächstem 1.S wert

            vierte abfrage:
            1.S
            10->20->10->40
            2.S
            50->(20 gelöscht)->40 gefunden, lösche eintrag und gehe zu nächstem 1.S wert

            fünfte abfrage:
            1.S
            10->20->10->40->30
            2.S
            50->(20 gelöscht)->(40 gelöscht)->(10 gelöscht)->60->30 gefunden, lösche eintrag und gehe zu nächstem 1.S wert

            sechste abfrage:
            1.S
            10->20->10->40->30->20
            2.S
            50->(20 gelöscht)->(40 gelöscht)->(10 gelöscht)->60->(30 gelöscht)->(10 gelöscht)->20 gefunden, lösche eintrag und gehe zu nächstem 1.S wert

            siebte abfrage:
            1.S
            10->20->10->40->30->20->10
            2.S
            50->(20 gelöscht)->(40 gelöscht)->(10 gelöscht)->60->(30 gelöscht)->(10 gelöscht)->(20 gelöscht)->70->30->10 gefunden, lösche eintrag und gehe zu nächstem 1.S wert

            so dass nachher in .1S nur noch 50, 60, 70, 30 übrig bleiben

            grüße,Andreas

            Comment


            • #7
              Hallo,

              Du kannst innerhalb der Schleife natuerlich auch loeschen (colX.Remove(...)).
              Die Aufsummierung der Anzahl koenntest du auch auf einfache Weise bewerkstelligen, einfach im entsprechenden IF-Zweig (vorhanden oder nicht vorhanden) einen Integerwerg inkrementieren.
              *-- robert.oh. --*

              Comment


              • #8
                Originally posted by robert.oh. View Post
                Hallo,

                Du kannst innerhalb der Schleife natuerlich auch loeschen (colX.Remove(...)).
                Die Aufsummierung der Anzahl koenntest du auch auf einfache Weise bewerkstelligen, einfach im entsprechenden IF-Zweig (vorhanden oder nicht vorhanden) einen Integerwerg inkrementieren.
                hi,
                wie gesagt, ich bin newbie , meinst du mit inkrementiren das hier http://www.at-mix.de/inkrementieren.htm ?

                und wie würde das genau aussehen? hast du ein beispielfür mich?

                grüße,Andreas

                Comment


                • #9
                  Hallo Andreas!

                  Also iterieren ist nicht so kompliziert wie es klingt, es bedeutet einfach einen numerischen Wert zu erhoehen - Beispiel: i = i + 1 [VB] oder i++ [C#]

                  Ich werde morgen nach einem moeglichen Beispiel Ausschau halten - schau ma mal ;-)
                  *-- robert.oh. --*

                  Comment

                  Working...
                  X