从字符串数组中删除最后一项

时间:2014-11-15 13:12:51

标签: c# arrays blackjack

我正在制作一个简单的二十一点游戏项目。首先,我创建了一系列卡片:

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 

当我应用我的删除命令时,它变为:

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。但我想只从整个数组中删除最后一项。问题是怎么解决这个问题?

4 个答案:

答案 0 :(得分:60)

要删除最后一个元素,请使用:

newDeck = newDeck.Take(newDeck.Count() - 1).ToArray();

您的解决方案会删除所有与最后一个元素相同的元素。对于字符串,这意味着它会删除所有等于A

的元素

答案 1 :(得分:16)

您可以使用Array类来调整大小:

Array.Resize(ref result, result.Length - 1);

答案 2 :(得分:7)

@Flat Eric解释了为什么你的解决方案无效。

以下是删除最后一个元素的替代方法:

newDeck = newDeck.Reverse().Skip(1).Reverse().ToArray();

澄清:

[a, b, c] => Reverse => [c, b, a] => Skip(1) => [b, a] => Reverse() => [a, b]

答案 3 :(得分:1)

这应该删除数组的最后一个元素:

Array.Resize(ref newDeck, newDeck.Length - 1);