Ich arbeite an einem einfachen Blackjack-Spielprojekt. Zunächst erstelle ich das Array von Karten:C# Löschen des letzten Eintrags aus String-Array
string[] deck = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", };
als ich es multiplizieren 4 und deckNumber
gegeben:
newDeck = Enumerable.Repeat(deck, deckNumber*4).SelectMany(x => x).ToArray();
, als ich letzte Karte aus dem Array gelöscht werden soll ich mich bewerben diese:
newDeck = newDeck.Where(w => w != newDeck.Last()).ToArray();
Das Problem besteht also darin, dass der Code das letzte Element nicht aus dem Array entfernt, so wirkt, als gäbe es mehrere Arrays, und entfernt alle letzten Elemente aus ihnen. Zum Beispiel mit einem Deck:
cards: 2 3 4 5 6 7 8 9 10 J Q K A 2 3 4 5 6 7 8 9 10 J Q K A 2 3 4 5 6 7 8 9 10 J Q K A 2 3 4 5 6 7 8 9 10 J Q K A
, wenn ich meinen Befehl remove anwenden wird es:
cards: 2 3 4 5 6 7 8 9 10 J Q K 2 3 4 5 6 7 8 9 10 J Q K 2 3 4 5 6 7 8 9 10 J Q K 2 3 4 5 6 7 8 9 10 J Q K
es alle von Arrays A entfernt. Aber ich möchte nur das letzte Element aus dem ganzen Array entfernen. Was ist das Problem, wie kann ich das lösen?
In 'w => w! = NewDeck.Last()' vergleicht man Strings, also werden alle Strings "A" als gleich betrachtet, deshalb werden alle A's entfernt. (Strings werden nach Wert nicht durch Referenz verglichen) –
Eine Lektüre wert: http://stackoverflow.com/q/943635/397817 –