2009-04-15 7 views
29

ile ayrılmış bir String dize Listesi dönüştürme nedir neye bağlıdır virgül (,)sınırlayıcı

+1

bir hız/performans çevirmeyelim Neden soru? "HIZLI yolu nedir ..." –

+0

En Hızlı VE/VEYA Etkin olarak en iyi şekilde alınamaz mı? – spacemonkeys

cevap

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

ta sarışın an – spacemonkeys

+7

Ekleyebileceğim tek şey, "ToArray()" dönüşümünden önce boş/boş bir işarettir: myListOfStrings.Where (İşlev (ler) Not String.IsNullOrEmpty (s)) .ArArray() ' –

1

ayrılmış değerlere sahip bir dizeye (string) bir listesini dönüştürmek için en iyi yolu "en iyi" demek istiyorsun. En az bellek yoğun olanı, önce son dizgenin boyutunu hesaplamak, daha sonra bu kapasiteye sahip bir StringBuilder oluşturmak ve dizeleri ona eklemektir.

StringBuilder, doğru boyuta sahip bir dize arabelleği oluşturacak ve bu arabellek, ToString yönteminden bir dize olarak aldığınız şudur. Bu, ilave ara diziler veya diziler oluşturulmadığı anlamına gelir.

// 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

Hayır "En iyi" ile ne demek istediğin önemli değil, bu muhtemelen en iyisi değil. – mquander

+0

@mquander: En az bellek yoğun, ilk paragrafta açıkça belirttim. Hafıza yükünü azaltmaya devam etmeniz gerekiyorsa, bu en iyi yöntemdir. – Guffa

+0

Bellek yoğunluğu açısından pek fark yok. Join yönteminde ara dize yok. Sadece referans dizisi. –

0

Çözümümün:

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

Pseudocode bazen güzel ama burada gerçek dil uygulamaları tercih ediliyor. –

0

basit bir çözüm:

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

Bu dizesinden ilk kömürü çıkartıyor (",")