dize dizisini dizeye dönüştür


155

Bir dize dizisini tek bir dizeye dönüştürmek istiyorum.

string[] test = new string[2];
test[0] = "Hello ";
test[1] = "World!";

"Merhaba Dünya!"

Yanıtlar:


280
string[] test = new string[2];

test[0] = "Hello ";
test[1] = "World!";

string.Join("", test);

3
+1 - @davidg
jmort253

Teşekkürler. Kopyayı doğrudan cevabımın içine yapıştırmış olmama rağmen sondaki alanı fark etmedim.
Dave Ward

2
Ben de benim dizeleri (koma ve boşluk) arasında bir ayırıcı koymak gerekiyordu, bu yüzden kullandım: var separator = ", "; string.Join(separator , test);
drpawelo

5
Mükemmel cevap. Yine de, bir kullanmak string.Join(string.Empty, test)yerine, kullanmanızı öneririm empty-paranthesis.
şimdi adlandırılmaması gereken kişi.

37

Önceden bahsedilen yöntemin kullanılmasından biraz daha hızlı bir seçenek Concat () yöntemidir. Aynı boş bir ayırıcı parametresi gerektirmez . Misal:Join()Join()

string[] test = new string[2];
test[0] = "Hello ";
test[1] = "World!";

string result = String.Concat(test);

dolayısıyla daha hızlıdır.


1
Concatdaha iyidir, iç kodunda, Joinher öğeden sonra ayırıcı ekleyecektir. Ancak Concatböyle kodlara sahip değil, daha basit ve daha doğrudan Join. Bu ilk cevap.
Sincap

22

Deneyin:

String.Join("", test);

iki öğeyi birleştiren bir dize döndürmelidir. "", dizgilerin ayırıcı olmadan birleştirilmesini istediğinizi belirtir.


Bu "HelloWorld!" kelimeler arasında boşluk olmadan?
jmort253

1
@ jmort253 - Sorudaki orijinal dize "Hello "zaten bir boşluk içeriyordu . Alan zaten orada olmasaydı, o zaman doğru olurdunuz ve " "ayırıcı olarak kullanmak daha mantıklı olurdu.
davidg

19

İhtiyacınız olan şey basit bir string.Concat () yöntemidir.

string[] test = new string[2];

test[0] = "Hello ";
test[1] = "World!";

string result = string.Concat(test);

Ayırıcı (boşluk, virgül vb.) De eklemeniz gerekiyorsa, string.Join () kullanılmalıdır.

string[] test = new string[2];

test[0] = "Red";
test[1] = "Blue";

string result = string.Join(",", test);

Bunu, string.Join () öğesinin hundered öğelerinden oluşan bir dize dizisinde gerçekleştirmeniz, performans bakış açısından daha iyidir. Ayırıcı olarak "" (boş) bir bağımsız değişken verin. StringBuilder performans uğruna da kullanılabilir, ancak kodu biraz daha uzatacaktır.


Concatve birleştirilecek 4 veya daha az dizeniz varsa Joindaha hızlıdır StringBuilder.
Kalite Katalizörü

3

Aggregate aynı zamanda kullanılabilir.

string[] test = new string[2];
test[0] = "Hello ";
test[1] = "World!";
string joinedString = test.Aggregate((prev, current) => prev + " " + current);

1
Bu, String.Joininşa edilen ekstra ekstra dizeler nedeniyle uygulamak için son derece boşa giden bir yöntemdir . İçin uygun varyant için lütfen stackoverflow.com/questions/217805/… adresini okuyun Aggregate.
Alexei Levenkov

1
    string ConvertStringArrayToString(string[] array)
    {
        //
        // Concatenate all the elements into a StringBuilder.
        //
        StringBuilder strinbuilder = new StringBuilder();
        foreach (string value in array)
        {
            strinbuilder.Append(value);
            strinbuilder.Append(' ');
        }
        return strinbuilder.ToString();
    }

3
Bu sadece manuel olarak uygulanır string.Join(" ", array)(sizinki dışında bir boşluk ekler). Neden sadece kütüphanede kullanmıyorsunuz?
davidg

1
@davidg - Ashwini muhtemelen yeni. Mevcut araçları kullanmayı öğrenmek ve kolejin "Bunu kendim yapmalıyım" anlayışının üstesinden gelmek biraz alıştırıyor. Benim için oldu. Sonunda, insanlar meslektaşlarının neden çevrelerindeki çevreleri kodlayabildiğini merak ediyor ve sonra kod kitaplıklarındaki değeri görüyor ve yeniden kullanıyorlar.
jmort253

ne hatırladım ne olursa olsun bu yardım etmeye çalıştım .. eğer herkes daha iyi bir çözüm varsa her zaman göndermek için özgür .. @jmort: çalıştığımdan bu yana 4 yıl geçti ... abt konuşmak ... herkes mükemmel değil ... öğrendiğiniz deneyim yıllarında .. umarım bu gerçeği inkar etmeyin ..
programcı

@Ashwini - Sizi rahatsız etmeye çalışmıyordum. Farklı mühendislerle çalışma deneyimime dayanarak @ davidg'in sorusunu yanıtlıyorum.
1911

2
Ayrıca, birleştirilmiş dize sonuna ek olarak eklenmiş bir alana sahip olacaktır. Yani bu soruyu tam olarak karşılamıyor.
jmort253

0

Projemi daha hızlı hale getirmek için bu yolu kullandım:

RichTextBox rcbCatalyst = new RichTextBox()
{
    Lines = arrayString
};
string text = rcbCatalyst.Text;
rcbCatalyst.Dispose();

return text;

RichTextBox.Text dizinizi otomatik olarak çok satırlı bir dizeye dönüştürür!


-1

Kabul edilen cevapta, String.Join kullanımı başına en iyi uygulama değildir. String.Concat, OP ilk öğede bir boşluk bıraktığından kullanılmalıdır: "Merhaba" (boş bir sınırlayıcı kullanmak yerine).

Ancak, OP "Merhaba Dünya!" Sonucunu istediğinden, String.Join hala uygun yöntemdir, ancak sondaki boşluk bunun yerine sınırlayıcıya taşınmalıdır.

// string[] test = new string[2];

// test[0] = "Hello ";
// test[1] = "World!";

string[] test = { "Hello", "World" }; // Alternative array creation syntax 
string result = String.Join(" ", test);

-4

Bunun gibi:

string str= test[0]+test[1];

Ayrıca bir döngü de kullanabilirsiniz:

for(int i=0; i<2; i++)
    str += test[i];
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.