2010-08-24 25 views
23

Lo que yo prefiero es algo así como:C#: cadena [] a cadena delimitada. ¿Hay un trazador de líneas?

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

Sin embargo, no existe tal función. Revisé MSDN y no me pareció una función que realizara la misma acción. Miré a StringBuilder, y de nuevo, nada me llamó la atención. ¿Alguien sabe de un trazador de líneas no demasiado complicado para hacer una matriz de una cadena delimitada. Gracias por la ayuda de sus muchachos.

ACTUALIZACIÓN: Wow, lol, mi mal. Seguí mirando el .Join en la matriz en sí y me estaba fastidiando muchísimo. Ni siquiera miré a String.Join. Gracias chicos. Una vez que me permita aceptar lo haré. Preciate la ayuda.

+0

algo como ' String.Join (chDelimiter, array); 'Puede que tengas que convertir primero char en una cadena. También hay una versión genérica. Sospecho que LINQ puede hacer esto de una manera elegante también. –

+0

Sí, seguí buscando en la unión equivocada. Gracias. – XstreamINsanity

Respuesta

43

Para matrices, puede utilizar:

string.Join(", ", strArray); 

Personalmente, utilizo un método de extensión que puedo aplicar a las colecciones enumerables de todos los tipos:

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(); 
} 

... que utilizo como por lo que:

strArray.Flatten(", "); 
+0

Buena función. Mi objetivo principal es tener un archivo delimitado, ponerlo en un programa para editar con SQL Lite como método de almacenamiento y luego enviarlo nuevamente a un archivo delimitado. Una vez que me permita aceptar lo haré. Gracias. – XstreamINsanity

+8

En NET4.0, hay una sobrecarga 'string.Join' que puede usar con cualquier colección' IEnumerable', http://msdn.microsoft.com/en-us/library/dd992421.aspx –

+0

@Danko: ¡Agradable! A medida que muevo mis aplicaciones a .NET 4, definitivamente voy a favorecer el método que sugirió. ¡Gracias! – kbrimington

4

uso String.Join

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

Puede utilizar la estática String.Join método:

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


EDIT: En respuesta al comentario: Basado en su comentario, puede tomar varias matrices, concatenar juntos, y luego unir todo el conjunto resultante. Puede hacerlo utilizando el método de extensión IEnumerable Concat. Aquí hay un ejemplo:

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

Espero que ayude!

+0

Lo que me molesta es que si algo es una cadena [], cuando lo haga. Participar, aún debería tener esa opción disponible. Debería tener la opción de unir matrices y la opción de UNIRSE a esa matriz. :) – XstreamINsanity

+0

Sí, lo vi. No necesariamente quise decir que lo necesito, digo que cuando tienes un string [] y sigues la variable con .Join (strArray.Join(), no obtienes el Join (string delimiter, string) [] strArray), creo que la cadena [] también debería tener la opción .Join (delimitador de cadena, string [] strArray), pero sería .Join (delimitador de cadena) ya que ya está una matriz. Lo dejé claro porque me confundí. :) – XstreamINsanity

5

Eche un vistazo a String.Join().

Su muestra debe tener este aspecto:

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

en este caso, string.join() es probablemente la forma más fácil de ir, puede igualmente utilizar LINQ aunque

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

El agregado es mucho más lento, debido a que no se usa un StringBuilder detrás de las escenas (iirc). –

Cuestiones relacionadas