Chuyển đổi `List <string>` thành chuỗi được phân tách bằng dấu phẩy


75

Có cách nào nhanh chóng để chuyển đổi List<string>sang dấu phân cách bằng dấu phẩy stringtrong C # không?

Tôi làm điều đó như thế này nhưng Có lẽ có một cách nhanh hơn hoặc hiệu quả hơn?

List<string> ls = new List<string>();
ls.Add("one");
ls.Add("two");
string type = string.Join(",", ls.ToArray());

PS: Đã tìm trên trang này nhưng hầu hết các giải pháp đều dành cho Java hoặc Python


2
Không, bạn đang làm đúng. Mặc dù tôi không nghĩ rằng bạn cần phải làm ToArray().
— Yuck

2
Viết nhanh hơn hay thực thi nhanh hơn?
— Ilia G

Cả hai :), Nhưng dường như nó không thể
— Ozkan

@Yuck Nó là cần thiết để chuyển đổi sang string[](Bởi vì tôi không sử dụng .NET 4)
— Ozkan

@Ozkan Bạn có thể nên gắn thẻ câu hỏi của mình cho phiên bản khung mà bạn đang làm việc. Tôi nghĩ rằng bạn sẽ tìm thấy hầu hết các câu trả lời sẽ cho rằng bạn đang sử dụng bản phát hành mới nhất.
— Yuck

Câu trả lời:


116

Trong .NET 4, bạn không cần ToArray()cuộc gọi - string.Joinquá tải để chấp nhận IEnumerable<T>hoặc chỉ IEnumerable<string>.

Có nhiều cách hiệu quả hơn để làm điều đó trước .NET 4, nhưng bạn có thực sự cần chúng không? Đây thực sự là một nút cổ chai trong mã của bạn?

Bạn có thể lặp lại danh sách, tính ra kích thước cuối cùng, phân bổ kích thước StringBuilderchính xác, sau đó tự mình tham gia. Điều đó sẽ tránh việc mảng bổ sung được xây dựng vì ít lý do - nhưng nó sẽ không tiết kiệm nhiều thời gian và nó sẽ tốn nhiều mã hơn.


19
string.Join (",", myList)
— Mahesh

15

Phần sau sẽ dẫn đến một danh sách được phân tách bằng dấu phẩy. Đảm bảo bao gồm một câu lệnh using forSystem.Linq

List<string> ls = new List<string>();
ls.Add("one");
ls.Add("two");
string type = ls.Aggregate((x,y) => x + "," + y);

sẽ mang lại một, hai

nếu bạn cần khoảng trắng sau dấu phẩy, chỉ cần thay đổi dòng cuối cùng thành string type = ls.Aggregate((x,y) => x + ", " + y);


@Ozkan Vui lòng kiểm tra nó và cho chúng tôi biết.
— Dan J

thực sự, tôi đã không kiểm tra. Chỉ với hai mục trong Danh sách, không, chúng nhanh như nhau, nhưng bùng nổ thành 100.000 mục, Aggregate thực sự chậm hơn nhiều so với string.Join. Thật tốt khi biết tôi đoán. Tôi đã ưa thích tổng hợp trong quá khứ, nhưng tôi nghĩ rằng tôi sẽ được chuyển sang string.Join trong tương lai
— Anthony Shaw

11

Để mở rộng về Jon Skeets, hãy trả lời mã cho điều này trong .Net 4là:

string myCommaSeperatedString = string.Join(",",ls);

3

Làm theo điều này:

       List<string> name = new List<string>();   

        name.Add("Latif");

        name.Add("Ram");

        name.Add("Adam");
        string nameOfString = (string.Join(",", name.Select(x => x.ToString()).ToArray()));

2
static void Main(string[] args)
{
   List<string> listStrings = new List<string>(){ "C#", "Asp.Net", "SQL Server", "PHP", "Angular"};
   string CommaSeparateString = GenerateCommaSeparateStringFromList(listStrings);
   Console.Write(CommaSeparateString);
   Console.ReadKey();
}

private static string GenerateCommaSeparateStringFromList(List<string> listStrings)
{
   return String.Join(",", listStrings);  
}

Chuyển danh sách chuỗi thành chuỗi được phân tách bằng dấu phẩy C #.


Mặc dù mã này có thể trả lời câu hỏi, nhưng việc cung cấp thêm ngữ cảnh về cách và / hoặc lý do tại sao nó giải quyết vấn đề sẽ cải thiện giá trị lâu dài của câu trả lời. Vui lòng đọc cách trả lời này để cung cấp câu trả lời chất lượng.
— thewaywewere

0

Đó là cách tôi muốn xem liệu tôi có đang duy trì mã của bạn hay không. Nếu bạn quản lý để tìm ra một giải pháp nhanh hơn, nó sẽ rất bí truyền và bạn thực sự nên chôn vùi nó bên trong một phương pháp mô tả những gì nó thực hiện.

(nó vẫn hoạt động mà không có ToArray)?


1
Tôi chỉ có thể làm string.Jointrên Arraycủa strings. Vì vậy, nó là cần thiết (bởi vì tôi không sử dụng.NET 4
— Ozkan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.