2014-11-15 20 views
17

Tôi đang làm việc trên một dự án trò chơi blackjack đơn giản. Thứ nhất tôi có thể tạo các mảng của thẻ:C# Xóa mục cuối cùng khỏi mảng của chuỗi

string[] deck = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", }; 

hơn tôi nhân nó 4 và trao deckNumber:

newDeck = Enumerable.Repeat(deck, deckNumber*4).SelectMany(x => x).ToArray(); 

khi tôi muốn xóa thẻ cuối cùng từ mảng tôi áp dụng điều này:

newDeck = newDeck.Where(w => w != newDeck.Last()).ToArray(); 

do đó, vấn đề là mã không loại bỏ mục cuối cùng khỏi mảng, hoạt động như có nhiều mảng và loại bỏ tất cả các phần tử cuối cùng khỏi chúng. Ví dụ với một boong:

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 

khi tôi áp dụng lệnh remove tôi nó trở thành:

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 

nó loại bỏ tất cả các từ mảng của A. Nhưng tôi muốn loại bỏ chỉ mục cuối cùng từ toàn bộ mảng. Whats vấn đề làm thế nào tôi có thể giải quyết này?

+3

Trong 'w => w! = NewDeck.Last()' bạn đang so sánh chuỗi, vì vậy tất cả các chuỗi "A" được coi là bằng, that's tại sao tất cả A's được loại bỏ. (Các chuỗi được so sánh theo giá trị không theo tham chiếu) –

+0

Giá trị đọc: http://stackoverflow.com/q/943635/397817 –

Trả lời

43

Để loại bỏ chỉ là yếu tố cuối cùng sử dụng này:

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

giải pháp của bạn loại bỏ tất cả các yếu tố đó là tương đương với yếu tố cuối cùng. Đối với chuỗi, điều này có nghĩa là, nó xóa tất cả các phần tử bằng A

7

@Flat Eric giải thích lý do giải pháp của bạn không hoạt động.

Đây là thay thế cho loại bỏ yếu tố cuối cùng:

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

Làm rõ:

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

Bạn có thể sử dụng Array lớp để thay đổi kích thước:

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

này nên loại bỏ các yếu tố cuối cùng của Mảng của bạn:

Array.Resize(ref newDeck, newDeck.Length - 1); 
Các vấn đề liên quan