convertir un tableau de chaînes en chaîne


155

Je voudrais convertir un tableau de chaînes en une seule chaîne.

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

J'aimerais avoir quelque chose comme "Hello World!"

Réponses:


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

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

string.Join("", test);

3
+1 - J'ai supprimé l'espace dans la jointure pour que cela soit correct, comme indiqué par @davidg
jmort253

Merci. Je n'ai pas remarqué l'espace de fin, même si je l'ai copié-collé directement dans ma réponse.
Dave Ward

2
J'avais aussi besoin de mettre un séparateur entre mes cordes (coma et espace) donc j'ai utilisé: var separator = ", "; string.Join(separator , test);
drpawelo

5
Très bonne réponse. Cependant, je suggérerais d'utiliser string.Join(string.Empty, test)plutôt que d'utiliser un fichier empty-paranthesis.
maintenant celui qui ne doit pas être nommé.

37

Une option légèrement plus rapide que l'utilisation de l'utilisation déjà mentionnée de la Join()méthode est la méthode Concat () . Il ne nécessite pas de paramètre de délimiteur vide comme le Join()fait. Exemple:

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

string result = String.Concat(test);

par conséquent, il est probablement plus rapide.


1
Concatest mieux, dans le code interne de Join, il ajoutera un séparateur après chaque élément. Mais Concatne pas avoir de tels codes, c'est plus simple et plus direct que Join. C'est la première réponse.
Squirrel.Downy

22

Essayer:

String.Join("", test);

qui doit renvoyer une chaîne joignant les deux éléments ensemble. ""indique que vous souhaitez que les chaînes soient jointes sans séparateurs.


Cela ne ferait-il pas "HelloWorld!" sans espace entre les mots?
jmort253

1
@ jmort253 - La chaîne d'origine "Hello "de la question contenait déjà un espace à la fin. Si l'espace n'était pas déjà là, alors vous auriez raison, et utiliser " "comme séparateur aurait plus de sens.
davidg

19

Vous avez besoin d'une simple chaîne: Concat ().

string[] test = new string[2];

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

string result = string.Concat(test);

Si vous devez également ajouter un séparateur (espace, virgule, etc.), string.Join () doit être utilisé.

string[] test = new string[2];

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

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

Si vous devez effectuer cela sur un tableau de chaînes avec des centaines d'éléments que string.Join () est meilleur du point de vue de la performance. Donnez simplement un argument "" (vide) comme séparateur. StringBuilder peut également être utilisé pour des raisons de performances, mais cela rendra le code un peu plus long.


Concatet Joinsont plus rapides que StringBuildersi vous avez 4 chaînes ou moins à concaténer.
Quality Catalyst

3

Aggregate peut également être utilisé pour le même.

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

1
Il s'agit d'une méthode extrêmement inutile à mettre String.Joinen œuvre en raison de la construction de plusieurs chaînes supplémentaires. Veuillez lire stackoverflow.com/questions/217805/… pour la variante appropriée de 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
Ceci est juste une implémentation manuelle string.Join(" ", array)(sauf que le vôtre ajoute un espace de fin). Pourquoi ne pas simplement utiliser celui de la bibliothèque?
davidg

1
@davidg - Ashwini est probablement nouveau. Apprendre à utiliser les outils existants et surmonter la mentalité du «je dois le faire moi-même» de l'université demande du temps pour s'y habituer. Ça l'a fait pour moi. Finalement, les gens se demandent pourquoi leurs collègues sont capables de coder des cercles autour d'eux, puis ils voient la valeur dans les bibliothèques de code et les réutilisent.
jmort253

tout ce dont je me souviens, j'ai essayé d'aider c'est tout..si quelqu'un a une meilleure solution, vous êtes toujours libre de la poster .. @jmort: ça fait 4 ans que je travaille ... je n'ai pas la mentalité de wht ur parler abt ... n'importe qui n'est pas parfait ... au fil des années d'expérience que vous apprenez .. j'espère que vous ne niez pas ce fait ..
programmeur

@Ashwini - N'essayait pas de vous offenser. Je réponds simplement à la question de @ davidg basée sur mon expérience de travail avec différents ingénieurs.
jmort253

2
En outre, la chaîne concaténée aura un espace supplémentaire attaché à son extrémité. Cela ne répond donc pas entièrement à la question.
jmort253

0

J'ai utilisé cette méthode pour accélérer mon projet:

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

return text;

RichTextBox.Text convertira automatiquement votre tableau en une chaîne multiligne!


-1

Dans la réponse acceptée, String.Join n'est pas la meilleure pratique selon son utilisation. String.Concat aurait dû être utilisé car OP incluait un espace de fin dans le premier élément: "Hello" (au lieu d'utiliser un délimiteur nul).

Cependant, puisque OP a demandé le résultat "Hello World!", String.Join est toujours la méthode appropriée, mais l'espace blanc de fin doit être déplacé vers le délimiteur à la place.

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

Comme ça:

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

Vous pouvez également utiliser une boucle:

for(int i=0; i<2; i++)
    str += test[i];
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.