私は単純なブラックジャックゲームプロジェクトに取り組んでいます。まず、カードの配列を作成します。
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();
問題は、コードが配列から最後のアイテムを削除せず、複数の配列があるように動作し、それらからすべての最後の要素を削除することです。たとえば、1つのデッキの場合:
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を削除します。しかし、配列全体から最後の項目のみを削除したいです。どうすればこれを解決できますか?
最後の要素だけを削除するには、これを使用します:
newDeck = newDeck.Take(newDeck.Count() - 1).ToArray();
ソリューションは、最後の要素に等しいすべての要素を削除します。文字列の場合、これはA
に等しいすべての要素を削除することを意味します
Array classを使用してサイズを変更できます:
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]
これにより、配列の最後の要素が削除されます。
Array.Resize(ref newDeck, newDeck.Length - 1);