2013-01-13 29 views
35

tôi đã này:Hủy bỏ tất cả các yếu tố có sản phẩm nào từ mảng chuỗi

List<string> s = new List<string>{"", "a", "", "b", "", "c"}; 

Tôi muốn loại bỏ tất cả các yếu tố có sản phẩm nào ("") từ nó một cách nhanh chóng (có thể là thông qua LINQ) mà không sử dụng một tuyên bố foreach vì đó làm cho mã trông xấu xí .

+2

Gần như trùng lặp: [Làm thế nào để bạn loại bỏ các mục "trống" khỏi danh sách chung?] (Http://stackoverflow.com/q/12849528/256431) –

+2

Btw, đó không phải là mảng 'chuỗi' mà là danh sách . –

Trả lời

58

Bạn có thể sử dụng List.RemoveAll:

C#

s.RemoveAll(str => String.IsNullOrEmpty(str)); 

VB.NET

s.RemoveAll(Function(str) String.IsNullOrEmpty(str)) 
+14

Tôi chỉ đơn giản là viết 's.RemoveAll (String.IsNullOrEmpty);', bạn không cần một lambda trong trường hợp này. –

+2

@PaoloMoretti: +1 Điểm tốt. Nhưng ít nhất trong VB.NET nó không phải là thực sự ngắn hơn: 's.RemoveAll (AddressOf String.IsNullOrEmpty)' và lamdba cho thấy rằng nó có thể sửa đổi nó một cách dễ dàng. Imho nó dễ đọc hơn với lambda. –

+0

Tại sao nó trả lại số phần tử đã bị xóa thay vì danh sách đã xóa? 'Int count = s.RemoveAll (string.IsNullOrEmpty);' là hợp lệ nhưng 'Danh sách list = s.RemoveAll (string.IsNullOrEmpty);' không. –

10
s = s.Where(val => !string.IsNullOrEmpty(val)).ToList(); 
+4

Điều này không chính xác phải là s = ​​s.Where (val =>! String.IsNullOrEmpty (val)). ToList(); Kiểu ban đầu của anh ta là 'List ', do đó bạn cần phải chắc chắn rằng nó vẫn là một' List ' – MethodMan

+0

theo cách này có thể hoạt động IList. IList không có RemoveAll. – liang

11

Check-out với List.RemoveAll với String.IsNullOrEmpty() phương pháp;

Cho biết chuỗi được chỉ định là null hay chuỗi Rỗng.

s.RemoveAll(str => string.IsNullOrEmpty(str)); 

Đây là một DEMO.

+3

+1 cho chữ thường "s" cho 'chuỗi' :) – nawfal

+0

Không. OP sử dụng cả hai :) chỉ sở thích cá nhân .. :) – nawfal

Các vấn đề liên quan