Подтвердить что ты не робот

С# Удаление последнего элемента из массива строки

Я работаю над простым проектом игры в блэкджек. Во-первых, я создаю массив карт:

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 из массива. Но я хочу удалить только последний элемент из целого массива. Какая проблема, как я могу это решить?

4b9b3361

Ответ 1

Чтобы удалить только последний элемент, используйте это:

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

Ваше решение удаляет все элементы, которые равны последнему элементу. Для строки это означает, что она удаляет все элементы, равные A

Ответ 2

Вы можете использовать Array класс для изменения размера:

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

Ответ 3

@Flat Eric объяснил, почему ваше решение не работает.

Здесь альтернативный для удаления последнего элемента:

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

Уточнение:

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