Có hàm nào trong C# để chuyển đổi nhanh một số bộ sưu tập thành chuỗi và các giá trị riêng biệt với dấu phân cách không?C# Danh sách <string> thành chuỗi có dấu phân tách
Ví dụ:
List<string> names
->string names_together = "John, Anna, Monica"
Có hàm nào trong C# để chuyển đổi nhanh một số bộ sưu tập thành chuỗi và các giá trị riêng biệt với dấu phân cách không?C# Danh sách <string> thành chuỗi có dấu phân tách
Ví dụ:
List<string> names
->string names_together = "John, Anna, Monica"
Bạn có thể sử dụng String.Join
. Nếu bạn có một List<string>
sau đó bạn có thể gọi ToArray
đầu tiên:
List<string> names = new List<string>() { "John", "Anna", "Monica" };
var result = String.Join(", ", names.ToArray());
Trong .NET 4 bạn không cần ToArray
nữa, kể từ khi có một tình trạng quá tải của String.Join
mà phải mất một IEnumerable<string>
.
Bạn cũng có thể làm điều này với LINQ nếu bạn muốn
var names = new List<string>() { "John", "Anna", "Monica" };
var joinedNames = names.Aggregate((a, b) => a + ", " + b);
Mặc dù tôi thích cú pháp phi LINQ trong câu trả lời của Quartermeister và tôi nghĩ Aggregate
có thể thực hiện chậm hơn (có lẽ nhiều hoạt động nối chuỗi).
List<string> targets = new List<string>();
var InboxChecked = true;
var BannerChecked = false;
var EmailChecked = true;
if (InboxChecked)
{
targets.Add("Inbox");
}
if (BannerChecked)
{
targets.Add("Banner");
}
if (EmailChecked)
{
targets.Add("Email");
}
var index = 0;
if (targets.Any())
{
var aggregate = targets.Aggregate((s1, s2) =>
{
return ++index == targets.Count - 1 ? s1 + " and " + s2 : s1 + ", " + s2;
});
// aggregate.Dump();
}
// returns -> Inbox and Email
Tại sao lại ở đây? Nó hầu như không liên quan gì đến OP ...? – Assimilater
Cảm ơn bạn đã trả lời nhanh, cả hai đều hoạt động tốt. Bạn nói đúng Tôi đã thực hiện một phép đo hiệu suất nhỏ bằng cách sử dụng lớp Stopwatch và linq-way là chậm hơn nhiều: String.Join (",", names.ToArray()); -> lấy 18 ve Tổng hợp ((a, b) => a + "," + b) -> lấy 736 dấu tích – nan
Vâng tôi nghĩ 'Tổng hợp' tốt hơn cho hoạt động loại Toán. Với chuỗi hoạt động này nó tương tự như 'cho mỗi' ing và chỉ phụ thêm vào một chuỗi rất chậm hiệu quả bởi vì bạn đang tạo một chuỗi mới cho mỗi mục tồn tại trong danh sách. – Bob
Lưu ý rằng Tổng hợp không có giá trị hạt giống sẽ ném một InvalidOperationException nếu vùng chứa trống. Sử dụng phiên bản hạt giống Tổng hợp (hạt giống, func) để tránh lỗi xử lý mã hoặc kiểm tra có điều kiện. String.Join không ném vào trống vì vậy không có hạt giống hoặc mã phụ được yêu cầu ... cộng với nó không yêu cầu LINQ và cú pháp là một chút rõ ràng hơn. – Huacanacha