Je travaille sur un simple projet de jeu de blackjack. Tout d'abord je crée le tableau de cartes:
string[] deck = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", };
que je multiplie 4 et étant donné deckNumber
:
newDeck = Enumerable.Repeat(deck, deckNumber*4).SelectMany(x => x).ToArray();
quand je veux supprimer la dernière carte du tableau, j'applique ceci:
newDeck = newDeck.Where(w => w != newDeck.Last()).ToArray();
le problème est donc que le code ne supprime pas le dernier élément du tableau, agit comme s'il y avait plusieurs tableaux et en supprime tous les derniers éléments. Par exemple avec un pont:
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
quand j'applique ma commande remove, cela devient:
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
il supprime tous les A du tableau. Mais je veux supprimer uniquement le dernier élément de l'ensemble du tableau. Quel est le problème, comment puis-je résoudre ce problème?
Pour ne supprimer que le dernier élément, utilisez ceci:
newDeck = newDeck.Take(newDeck.Count() - 1).ToArray();
Votre solution supprime tous les éléments égaux au dernier élément. Pour une chaîne, cela signifie que tous les éléments égaux à A
sont supprimés.
Vous pouvez utiliser Array class pour redimensionner:
Array.Resize(ref result, result.Length - 1);
@Flat Eric a expliqué pourquoi votre solution ne fonctionnait pas.
Voici une alternative pour supprimer le dernier élément:
newDeck = newDeck.Reverse().Skip(1).Reverse().ToArray();
Clarification:
[a, b, c] => Reverse => [c, b, a] => Skip(1) => [b, a] => Reverse() => [a, b]
Cela devrait supprimer le dernier élément de votre tableau:
Array.Resize(ref newDeck, newDeck.Length - 1);