List vergleich

  • Hallo, ich bin es nochmal ;p


    habe mal eine frage, ich habe 2 Listen und ich möchte diese vergleichen.


    also ich habe mir die vorgehensweise so vorgestellt:
    List A Items: 1 3 4 5 7
    List B items: 0 2 4 6 8


    ist 1 in B? wenn ja gibt 1 aus wenn nicht mach was anderes
    ist 3 in B?
    ist 4 in B? usw.


    ich habe es mit Intersect versucht aber ich glaube damit funktioniert es nicht.


    so wie ich das aufgebaut habe kann es leider nicht funktionieren aber vllt hat jemand ja paar tipps =)



    Code
    1. if (MySQL_Spieler.Intersect(Spieler).Any()) // ist irgendein Spieler aus MySQL_Spieler in Spieler vorhanden?



    also ich möchte eigentlich nur die Spieler herausfiltern, die nicht in MySQL_Spieler sind und wichtig ist, das ich diesen namen dann auch speichern kann, wenn er ihn gefunden hat ;p

  • Normalerweise sollten es 2 for schleifen. einmal ein for für die liste 1 und darin ein for mit der liste 2. Müsste ungefähr so aussehen (weiß jetzt nicht, ob es < oder <= ist):


    Code
    1. for (int i < 0, i <= list1.count, i++)
    2. for (int j < 0, j <= list2.count, j++)
    3. if (list1[i] == list2[j])
    4. //Werte sind gleich, tu etwas


    soll nur darstellung sein. Syntax etc. musst du selber richtig schreiben :)

  • Normalerweise sollten es 2 for schleifen. einmal ein for für die liste 1 und darin ein for mit der liste 2. Müsste ungefähr so aussehen (weiß jetzt nicht, ob es < oder <= ist):


    Code
    1. for (int i < 0, i <= list1.count, i++)
    2. for (int j < 0, j <= list2.count, j++)
    3. if (list1[i] == list2[j])
    4. //Werte sind gleich, tu etwas


    soll nur darstellung sein. Syntax etc. musst du selber richtig schreiben :)


    Der Code ist falsch :D
    int i < 0? Da fehlt dann die Zuweisung. (+ Die Bedingungen werden durch ";" getrennt, nicht durch ",")


    Benutz einfach die bereitgestellten Methoden der Klasse List :)
    http://msdn.microsoft.com/de-d…ry/bfed8bca(v=vs.80).aspx

  • dankeschön =) ... habe es nun so gelöst:



    Code
    1. for (int i = 0; i < MySQL_Spieler.Count; i++)
    2. {
    3. Spieler.Remove(MySQL_Spieler);
    4. }


    es werden nun alle Spieler rausgelöscht und wenn was übrig bleibt in der liste, dann habe ich meine werte ;p

  • sollte funktionieren. kleiner style-kommentar. ++i ist besser als i++. darfst selbst nachlesen warum, sollst ja was lernen dabei ;)

    Dieser Beitrag wurde noch nie editiert, zuletzt von »hangman« (Heute , 13:37)



    1355?mode=raw


    Skill ist, wenn Luck zur Gewohnheit wird

  • Oder List.Contains(item T) ?



    dankeschön =) ... habe es nun so gelöst:

    Code
    1. for (int i = 0; i < MySQL_Spieler.Count; i++)
    2. {
    3. Spieler.Remove(MySQL_Spieler);
    4. }


    es werden nun alle Spieler rausgelöscht und wenn was übrig bleibt in der liste, dann habe ich meine werte ;p


    Versteh ich jetzt nicht oder steh ich aufm Schlauch?
    Warum die for Schleife? Du iterierst jetzt einmal i über alle Spieler und löschst immer den gleichen?!
    Wenn dann MySQL_Spieler[i] ?!


    Oder fehlt da noch eine Schleife?


    Gruß

  • stichwort reihenfolge

    Dieser Beitrag wurde noch nie editiert, zuletzt von »hangman« (Heute , 13:37)



    1355?mode=raw


    Skill ist, wenn Luck zur Gewohnheit wird

  • Solltest du das .NET Framework 3.5(oder höher) einsetzen (Wovon ich ausgehe) eignet sich für diesen Zweck LINQ to SQL besser als alles andere.
    In einer Schleife über alle Elemente zu iterieren ist total unnötig.


    Aber es ist doch egal, ob die Variable vor oder nach der Operation inkrementiert wird. Oder etwa nicht?


    Das kommt auf den Fall an. Ich würde auch nicht, wie hangman es gesagt hat, immer ++i anstatt i++ nehmen. Dort wo die Operation ein inkrementieren vor der Abfrage erfordert ist es eben sinnvoll. An anderen Stellen (Meiner Meinung nach) nicht.

    And the reign will kill us all
    We throw ourselves against the wall
    But no one else can see
    The preservation of the martyr in me


    Slipknot - Psychosocial

  • sagen wir es so. in den meisten fällen kann man in eine falle tappen, wenn man i++ schreibt und sich dann wundert, warum das falsche gemacht wird. in den fällen, wo i++ benötigt wird, sollte man das dann auch kommentieren und begründen, warum man so etwas undurchsichtiges macht. also ist grundsätzlich ++i besser ;)


    int iAlteZahl = 1;
    int iNeueZahl = iAlteZahl++;
    int iNeueZahl = ++iAlteZahl;


    bei sowas tappt man gerne rein. bei Zeile 2 wird erst iNeueZahl der Wert von iAlteZahl zugewiesen und diese dann inkrementiert, man will aber eigentlich, dass inkrementiert wird und die höhere zahl zugewiesen wird. falls ich tatsächlich den alten wert zuweisen will und dann die zahl erhöhen, sollte ich das niemals mit dem postfix-++-operator machen, weil es einfach undurchsichtig ist und ein ganz schlechter stil.


    deswegen beharre ich darauf, dass ++i besser ist, weil es an sich immer benötigt wird. ansonsten würde ich es auf 2 schritte machen.


    int iNeueZahl = iAlteZahl;
    AlteZahl++;


    sonst leist der nächste möglicherweise was falsch.

    Dieser Beitrag wurde noch nie editiert, zuletzt von »hangman« (Heute , 13:37)



    1355?mode=raw


    Skill ist, wenn Luck zur Gewohnheit wird


  • Der Code ist falsch :D
    int i < 0? Da fehlt dann die Zuweisung. (+ Die Bedingungen werden durch ";" getrennt, nicht durch ",")


    Benutz einfach die bereitgestellten Methoden der Klasse List :)
    http://msdn.microsoft.com/de-d…ry/bfed8bca(v=vs.80).aspx


    wow ^^
    sorry, gestern getrunken und bin da grad erst aufgestanden, als ich den beitrag verfasst habe. vollkommener fail :D
    und wie schon gesagt, syntax kenn ich nicht auswendig, daher einfach hier schnell (ohne Visual Studio, etc.) geschrieben. Wollte auch nur den Lösungsweg verdeutlichen, mehr nicht.