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

本文关键字:一项 最后 字符串 数组 删除 | 更新日期: 2023-09-27 18:30:27

我正在做一个简单的二十一点游戏项目。首先,我创建卡片数组:

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

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

要删除最后一个元素,请使用以下命令:

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

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

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

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

它创建一个具有指定大小的新数组,并将元素复制到新数组。它实际上并没有调整数组的大小,命名有点误导。

实际上不可能调整数组的大小。数组是固定集合。它的设计使然,以保持阵列实现的效率。

@Flat Eric解释了为什么你的解决方案不起作用。

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

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

澄清:

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

使用的是C# 8.0(随 .net 3.0 发布)或更高版本,则很容易删除数组的最后一项。

您可以通过将"hat"^运算符与范围..运算符组合来删除最后一项:

newDeck = newDeck[..^1];  // all items in the array except the last
<小时 />

^..的其他一些例子:

var lastItem   = newDeck[^1];    // last item in array
var allItems   = newDeck[..];    // all items
var skipTwo    = newDeck[2..];   // all items except the first 2 items
var innerItems = newDeck[1..^1]  // all items except the first and last

在线演示