przekonwertuj tablicę ciągów na ciąg


155

Chciałbym przekonwertować tablicę ciągów na pojedynczy ciąg.

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

Chciałbym mieć coś takiego jak „Hello World!”

Odpowiedzi:


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

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

string.Join("", test);

3
+1 - Usunąłem spację w Join, aby to poprawić, jak wskazał @davidg
jmort253

Dzięki. Nie zauważyłem spacji na końcu, mimo że skopiowałem ją i wkleiłem bezpośrednio do mojej odpowiedzi.
Dave Ward

2
Musiałem również wstawić separator między ciągami (koma i spacja), więc użyłem: var separator = ", "; string.Join(separator , test);
drpawelo

5
Świetna odpowiedź. Chociaż sugerowałbym string.Join(string.Empty, test)raczej używanie niż używanie empty-paranthesis.
teraz ten, którego nie można nazwać.

37

Nieco szybszą opcją niż użycie wspomnianej już Join()metody jest metoda Concat () . Nie wymaga tak jak pustego parametru separatora Join(). Przykład:

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

string result = String.Concat(test);

stąd prawdopodobnie szybciej.


1
Concatjest lepiej, w kodzie wewnętrznym Joindoda separator po każdym elemencie. Ale Concatnie ma takich kodów, jest prostszy i bardziej bezpośredni niż Join. To jest najlepsza odpowiedź.
Squirrel.Downy

22

Próbować:

String.Join("", test);

co powinno zwrócić łańcuch łączący dwa elementy razem. ""wskazuje, że chcesz, aby ciągi były połączone ze sobą bez żadnych separatorów.


Czy nie spowodowałoby to „HelloWorld!” bez spacji między słowami?
jmort253

1
@ jmort253 - Oryginalny ciąg "Hello "w pytaniu miał już spację na końcu. Gdyby jeszcze nie było miejsca, miałbyś rację, a użycie go " "jako separatora miałoby większy sens.
davidg

19

Potrzebujesz prostego ciągu znaków.Concat ().

string[] test = new string[2];

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

string result = string.Concat(test);

Jeśli potrzebujesz również dodać separator (spacja, przecinek itp.), Powinieneś użyć string.Join ().

string[] test = new string[2];

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

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

Jeśli musisz to zrobić na tablicy ciągów zawierającej setki elementów, niż string.Join () jest lepsza z punktu widzenia wydajności. Po prostu podaj "" (pusty) argument jako separator. StringBuilder może być również używany ze względu na wydajność, ale sprawi, że kod będzie nieco dłuższy.


Concati Joinsą szybsze niż StringBuilderjeśli masz 4 lub mniej ciągów do połączenia.
Quality Catalyst

3

Aggregate może być również używany do tego samego.

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

1
Jest to niezwykle marnotrawna metoda do wdrożenia String.Joinze względu na wiele dodatkowych ciągów. Przeczytaj stackoverflow.com/questions/217805/…, aby zapoznać się z prawidłowym wariantem 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
To jest po prostu ręczne implementowanie string.Join(" ", array)(z wyjątkiem twojego dodaje spację na końcu). Dlaczego nie skorzystać po prostu z tego w bibliotece?
davidg

1
@davidg - Ashwini jest prawdopodobnie nowa. Nauka korzystania z istniejących narzędzi i radzenie sobie z mentalnością „Muszę to zrobić sam” w college'u wymaga trochę przyzwyczajenia. Zrobiło to dla mnie. W końcu ludzie zastanawiają się, dlaczego ich koledzy są w stanie kodować kręgi wokół nich, a potem dostrzegają wartość w bibliotekach kodu i ponownie je wykorzystują.
jmort253

cokolwiek sobie przypomniałem, próbowałem pomóc, to wszystko ... jeśli ktoś ma lepsze rozwiązanie, zawsze możesz je opublikować .. @jmort: minęły 4 lata odkąd pracuję ... nie mam mentalności wht ur talking abt ... nikogo nie jest doskonały ... przez lata doświadczeniem nauczysz ..hope u nie zaprzecza tego faktu ..
programista

@Ashwini - nie próbowałem cię urazić. Odpowiadam tylko na pytanie @ davidg w oparciu o moje doświadczenie w pracy z różnymi inżynierami.
jmort253

2
Ponadto połączony ciąg będzie miał dodatkową spację przypiętą do końca. Więc to nie w pełni odpowiada na pytanie.
jmort253

0

Wykorzystałem ten sposób, aby przyspieszyć mój projekt:

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

return text;

RichTextBox.Text automatycznie skonwertuje twoją tablicę na ciąg wielowierszowy!


-1

W przyjętej odpowiedzi, String.Join nie jest najlepszą praktyką w jej użyciu. Należy użyć String.Concat, ponieważ OP zawierał spację końcową w pierwszym elemencie: „Hello” (zamiast używać ogranicznika null).

Jednakże, ponieważ OP poprosił o wynik „Hello World!”, String.Join jest nadal odpowiednią metodą, ale końcowe białe znaki powinny zostać przeniesione do separatora.

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

Lubię to:

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

Możesz także użyć pętli:

for(int i=0; i<2; i++)
    str += test[i];
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.