2011-10-07 19 views
7

Digamos que tengo una matriz (o lista) de los artículosImpresión de una coma (,) después de cada elemento de una matriz

A[] = [a,b,c,d,e] 

Si quiero imprimirlos para cada elemento está separado por una coma (o cualquier otro delimitador), por lo general tiene que hacer esto:

for(int i=0; i < A.Count; i++) 
{ 
    Console.Write(A[i]); 

    if (i != A.Count-1) 
     Console.Write(","); 
} 

lo tanto, mi salida se ve como:

a,b,c,d,e 

¿hay una manera mejor o más ordenado a ¿lograr esto?

me gusta usar un bucle foreach, pero que imprime una coma después del último elemento, así, que no es deseable.

Respuesta

26
Console.WriteLine(string.Join(",", A)); 
+0

+1 presente elimino mi propia responde a favor de esto –

+0

String es una clase. cadena es un tipo de datos. string.Join no tiene sentido de forma simbólica, debería ser String.Únase a –

+5

@HasanKhan No hay [ninguna diferencia] (http://blogs.msdn.com/b/csharpfaq/archive/2004/03/12/what-s-the-difference-between-code-string-code-and -code-system-string-code.aspx) entre 'string' y' System.String'. Es una preferencia del desarrollador. – vcsjones

9

Usted está buscando String.Join():

var list = String.join(",", A); 

String.Join Método (String, String[])

  concatena todos los elementos de una matriz de cadenas, utilizando el separador especificado entre cada elemento.

public static string Join(
    string separator, 
    params string[] value 
) 
3

Utilice el método string.Join, muy práctico.

String.Join(",", my_array) 
2

Uso:

String.Join(",", arrayOfStrings);

2
string separator = String.Empty; 
for(int i=0; i < A.Length; i++) 
{ 
    Console.Write(seperator); 
    Console.Write(A[i]); 
    separator = ","; 
} 
+1

¿Por qué el voto a favor? Esta parece ser una solución sensata. (Aunque "separador" está mal escrito.) –

+0

Definitivamente estoy haciendo +1 en este. Esto es lo que hago la mayor parte del tiempo para resolver este tipo de problema, aunque suelo usar un StringBuilder y foreach – Fede

+0

Eric, ¿de verdad le gusta esta solución? Siento que configurar el separador en cada iteración hace que el código sea muy difícil de leer. [Y no, no voté pero no votaré esta respuesta tampoco.] – SolutionYogi

6

¿Hay una mejor o más ordenado manera de lograr esto? Me gusta usar un bucle foreach, pero que imprime una coma después del último elemento, así, que no es deseable.

Como han dicho otros, Join hace lo correcto. Pero aquí hay otra forma de pensar sobre el problema que podría ayudarlo en el futuro. En lugar de pensar en el problema como poner una coma después de cada elemento, excepto el último elemento - que se tenga en cuenta correctamente hace que sea difícil trabajar con el bucle "foreach" - pensar en el problema como poner una coma antes de cada elemento excepto el primer elemento. ¡Ahora es fácil hacerlo con un bucle foreach!

por alrededor de un millón de maneras más para resolver un problema similar, véase:

Eric Lippert's challenge "comma-quibbling", best answer?

Y el blog original:

http://blogs.msdn.com/b/ericlippert/archive/2009/04/15/comma-quibbling.aspx

+0

Lo he considerado como 'poner una coma antes de cada elemento excepto el primero' y todavía no he podido resolverlo con un foreach. Tal vez me estoy perdiendo algo obvio. Examinando sus enlaces ahora para, con suerte, una mejor comprensión. Gracias por los enlaces. – xbonez

+1

@xbonez: "Poner una coma antes de cada elemento, excepto el primero" se hace mediante el uso de un condicional en un 'bool' que se cambia dentro del ciclo. Por ejemplo, 'if (! IsFirstElement) {sb.Append (", ");} isFirstElement = false;' – Brian

1
using System; 
using System.Linq; 

public class Program 
{ 
    public static void Main() 
    { 
     string[] values = new string[]{"banana", "papaya", "melon"}; 

     var result = values.Aggregate((x,y) => x + ", " + y); 

     Console.WriteLine(result); 
    } 
} 
Cuestiones relacionadas