我正在开发一个简单的二十一点游戏项目。首先,我创建了牌的数组:
string[] deck = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", };
然后将其乘以4,并赋给deckNumber
:
newDeck = Enumerable.Repeat(deck, deckNumber*4).SelectMany(x => x).ToArray();
当我想从数组中删除最后一张卡片时,我会使用以下方法:
newDeck = newDeck.Where(w => w != newDeck.Last()).ToArray();
所以问题在于代码没有从数组中删除最后一个元素,就像有多个数组一样,并且从它们所有的末尾元素中删除。例如,在一个牌组中:
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
当我使用我的 remove 命令时,它变成了:
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
它从数组中删除所有的A。但是我只想从整个数组中删除最后一个项目。问题出在哪里,我该如何解决?
w => w != newDeck.Last()
中,你正在比较字符串,所以所有的字符串 "A" 都被认为是相等的,这就是为什么所有的 A 都被移除了。(字符串是按值而非引用进行比较)。 - Daniel J.G.