2009-04-15 31 views
29

Whats cách tốt nhất để chuyển đổi một danh sách (của string) thành một chuỗi với các giá trị tách bằng dấu phẩy (,)Chuyển đổi Danh sách String để một String cách nhau bởi một dấu phân cách

+1

Tại sao không tắt chức năng này thành một tốc độ/hiệu suất câu hỏi? "Cách nhanh nhất để ..." –

+0

Không thể được giải thích là nhanh nhất và/hoặc hiệu quả nhất? – spacemonkeys

Trả lời

95
String.Join(",", myListOfStrings.ToArray()) 
+0

ta thời điểm tóc vàng – spacemonkeys

+7

Điều duy nhất tôi có thể thêm là một kiểm tra rỗng/trống trước khi 'ToArray()' chuyển đổi: 'myListOfStrings.Where (Chức năng (s) Không String.IsNullOrEmpty (s)). ToArray()' –

1

Điều đó phụ thuộc vào những gì bạn có nghĩa là "tốt nhất". Bộ nhớ ít tốn kém nhất là đầu tiên tính toán kích thước của chuỗi cuối cùng, sau đó tạo một StringBuilder với dung lượng đó và thêm các chuỗi vào nó.

StringBuilder sẽ tạo bộ đệm chuỗi có kích thước chính xác và bộ đệm đó là những gì bạn nhận được từ phương thức ToString dưới dạng chuỗi. Điều này có nghĩa rằng không có thêm chuỗi trung gian hoặc mảng được tạo ra.

// specify the separator 
string separator = ", "; 

// calculate the final length 
int len = separator.Length * (list.Count - 1); 
foreach (string s in list) len += s.Length; 

// put the strings in a StringBuilder 
StringBuilder builder = new StringBuilder(len); 
builder.Append(list[0]); 
for (int i = 1; i < list.Count; i++) { 
    builder.Append(separator).Append(list[i]); 
} 

// get the internal buffer as a string 
string result = builder.ToString(); 
+4

Không vấn đề bạn có ý nghĩa gì bởi "tốt nhất" này có lẽ không phải là tốt nhất. – mquander

+0

@mquander: Đó là bộ nhớ ít tốn kém nhất, tôi đã nói rõ ràng rằng trong đoạn đầu tiên. Nếu bạn cần phải giảm tải bộ nhớ, đây rõ ràng là phương pháp tốt nhất. – Guffa

+0

Không có nhiều sự khác biệt về cường độ bộ nhớ. Không có chuỗi trung gian trong phương thức Tham gia. Nó chỉ là mảng tham chiếu. –

0

Giải pháp của tôi:

string = ["a","2"]\n 
newstring = "" 
endOfString = len(string)-1 
for item in string: 
    newstring = newstring + item 
if item != string[endOfString]: 
    newstring = newstring ","' 
+1

Mã giả đôi khi tốt đẹp nhưng thực thi ngôn ngữ thực tế được ưa thích ở đây. –

0

Một giải pháp đơn giản:

dim str as string = "" 
for each item as string in lst 
    str += ("," & item) 
next 
return str.substring(1) 

Phải mất khỏi char đầu tiên kể từ chuỗi (",")

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