Cú pháp chính xác cho điều này là gì:
IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();
Tôi đang làm gì vậy? TSource có nghĩa là gì?
Câu trả lời:
Vấn đề là bạn đang gọi List<T>.Reverse()
mà trả về void
.
Bạn có thể làm:
List<string> names = "Tom,Scott,Bob".Split(',').ToList<string>();
names.Reverse();
hoặc là:
IList<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>();
Cách thứ hai đắt hơn, vì việc đảo ngược một tùy ý IEnumerable<T>
liên quan đến việc lưu vào bộ đệm tất cả dữ liệu và sau đó mang lại tất cả - trong khi List<T>
có thể thực hiện tất cả việc đảo ngược "tại chỗ". (Sự khác biệt ở đây là nó đang gọi Enumerable.Reverse<T>()
phương thức mở rộng, thay vì List<T>.Reverse()
phương thức cá thể.)
Hiệu quả hơn, bạn có thể sử dụng:
string[] namesArray = "Tom,Scott,Bob".Split(',');
List<string> namesList = new List<string>(namesArray.Length);
namesList.AddRange(namesArray);
namesList.Reverse();
Điều này tránh tạo ra bất kỳ bộ đệm nào có kích thước không phù hợp - với chi phí là lấy bốn câu lệnh mà một câu sẽ làm ... Như mọi khi, hãy cân nhắc khả năng đọc so với hiệu suất trong trường hợp sử dụng thực.
Tôi nhận ra rằng câu hỏi này khá cũ, nhưng tôi đã gặp vấn đề tương tự, ngoại trừ chuỗi của tôi có khoảng trắng trong đó. Đối với những người cần biết cách phân tách một chuỗi không chỉ bằng dấu phẩy:
string str = "Tom, Scott, Bob";
IList<string> names = str.Split(new string[] {","," "},
StringSplitOptions.RemoveEmptyEntries);
StringSplitOptions loại bỏ các bản ghi chỉ là ký tự khoảng trắng ...
List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList();
Cái này hoạt động.
Điều bạn còn thiếu ở đây là .Reverse () là một phương thức void. Không thể gán kết quả của .Reverse () cho một biến. Tuy nhiên, bạn có thể thay đổi thứ tự để sử dụng Enumerable.Reverse () và nhận kết quả của bạn
var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>()
Sự khác biệt là Enumerable.Reverse () trả về IEnumerable <T> thay vì trả về void
Nếu bạn đang cố gắng
sau đây sẽ hoạt động:
string str = "Tom Cruise, Scott, ,Bob | at";
IEnumerable<string> names = str
.Split(new char[]{',', '|'})
.Where(x=>x!=null && x.Trim().Length > 0)
.Select(x=>x.Trim());
Đầu ra
Bây giờ bạn rõ ràng có thể đảo ngược thứ tự như những người khác đề xuất.