2010-08-24 3 views
23

Tercih ettiğim şey şudur:C#: string [] sınırlanmış dizeye. Tek liner var mı?

string[] strArray = {"Hi", "how", "are", "you"}; 
string strNew = strArray.Delimit(chDelimiter); 

Ancak, böyle bir işlev yoktur. MSDN'e baktım ve hiçbir şey aynı eylemi gerçekleştirecek bir işlev olarak bana bakmadı. StringBuilder'a baktım ve bir daha hiçbir şey bana karşı çıkmadı. Bir dizi sınırlandırılmış bir dizgi yapmak için son derece karmaşık bir astarın olmadığını biliyor mu. Adamların yardımları için teşekkürler.

GÜNCELLEME: Vay, lol, kötüyüm. Dizinin kendisinde .Join'e bakmaya devam ettim ve cehennemden bıktım. String.Join'e bile bakmadım. Teşekkürler beyler. Bir kez kabul etmeme izin verir. Yardımı belirtin.

+0

Something olsa LINQ kullanabilirsiniz, muhtemelen ' String.Join (chDelimiter, array); 'Önce char'i bir dizgeye çevirmeniz gerekebilir. Genel bir sürümü de var. LINQ'un bunu da zarif bir şekilde yapabileceğinden şüpheleniyorum. –

+0

Evet, yanlış katılmaya bakmaya devam ettim. Teşekkürler. – XstreamINsanity

cevap

43

, şunları kullanabilirsiniz:

public static string Flatten(this IEnumerable elems, string separator) 
{ 
    if (elems == null) 
    { 
     return null; 
    } 

    StringBuilder sb = new StringBuilder(); 
    foreach (object elem in elems) 
    { 
     if (sb.Length > 0) 
     { 
      sb.Append(separator); 
     } 

     sb.Append(elem); 
    } 

    return sb.ToString(); 
} 

... Ben gibi kullanın:

string.Join(", ", strArray); 

Şahsen ben her türlü enumerable koleksiyonları uygulayabileceğiniz bir uzantısı yöntemi kullanmak böylece:

strArray.Flatten(", "); 
+0

Güzel işlev. Benim temel amacım, sınırlandırılmış bir dosyamız var, onu SQL Lite ile saklama yöntemi olarak düzenlemek için bir programa koyup, onu ayrılmış bir dosyaya geri göndermek istiyoruz. Bir kez kabul edeyim kabul edeceğim. Teşekkürler. – XstreamINsanity

+8

NET4.0'da, herhangi bir 'IEnumerable 'koleksiyonuyla kullanabileceğiniz bir' string.Join' yüklemesi var, http://msdn.microsoft.com/en-us/library/dd992421.aspx –

+0

@Danko: Nice! Uygulamalarımı .NET 4'e taşıdığımdan, önerdiğiniz yöntemi kesinlikle destekleyeceğim. Teşekkürler! – kbrimington

4

Kullanım String.Join

string[] strArray = {"Hi", "how", "are", "you"}; 
string strNew = String.Join("," strArray); 
6

Statik String.Join yöntemi kullanabilirsiniz:

String strNew = String.Join(chDelimiter, strArray);


DÜZENLEME: cevaben yorum yapmak: onları bir araya bağlamak, birkaç diziler alabilir, yorumunuzla ilgili dayanarak, ve sonuçta oluşan dizinin tümüne katılın. Bunu IEnumerable uzantı yöntemini Concat kullanarak yapabilirsiniz. İşte bir örnek:

//define my two arrays... 
string[] strArray = { "Hi", "how", "are", "you" }; 
string[] strArray2 = { "Hola", "como", "esta", "usted" }; 

//Concatenate the two arrays together (forming a third array) and then call join on it... 
string strNew = String.Join(",", strArray.Concat(strArray2)); 

Bu yardımcı olur umarız!

+0

Beni rahatsız eden şey, eğer bir şey bir dize [] ise, o zaman yaptığım zaman .Join, hala bu seçeneği kullanabilmem gerekir. Dizilere katılma seçeneğine ve bu diziyi JOIN yapma seçeneğine sahip olmalıydım. :) – XstreamINsanity

+0

Evet, onu gördüm. İhtiyacım olduğu anlamına gelmedim, dize [] ve değişkeni .Join (strArray.Join()) ile takip ettiğinizde, Join (string sınırlayıcı, string) almazsınız demiyorum [] strArray] seçeneği, başka birleştirme seçenekleri elde edersiniz.Ben string [] .Join (string sınırlayıcı, string [] strArray) seçeneğine sahip olması gerektiğini düşünüyorum, ancak bu zaten olurdu .Join (string sınırlayıcı) Bir dizi.Kendimi netleştirdim çünkü kendimi karıştırdım. :) – XstreamINsanity

5

String.Join()'a bakın.

Sizin örnek şuna benzer gerekir:

bu durumda
 string delimiter = "," 
     string[] strArray = { "Hi", "how", "are", "you" }; 
     string strNew = String.Join(delimiter, strArray); 
1

, String.Join() gitmek için en kolay yolu, eşit gibi

var comSeparatedStrings = strings.Aggregate((acc, item) => acc + ", " + item); 
+0

Agrega, sahne arkasında bir StringBuilder kullanılmadığı için çok daha yavaştır (iirc). –