2011-10-07 10 views
7

Diciamo che ho un array (o lista) di elementiStampa di una virgola (,) dopo ogni elemento in un array

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

Se voglio stamparli in modo che ogni elemento è separato da una virgola (o qualsiasi altro delimitatore), io in genere hanno a che fare questo:

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

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

Quindi, la mia uscita assomiglia:

a,b,c,d,e 

esiste un modo migliore o più elegante raggiungere questo?

Mi piace usare un ciclo foreach, ma questo stampa una virgola anche dopo l'ultimo elemento, il che è indesiderabile.

risposta

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

+1 Con la presente cancellare il mio rispondi a favore di questo. –

+0

La stringa è una classe. string è un tipo di dati. string.Join non ha senso symantically dovrebbe essere String.Unisciti a –

+5

@HasanKhan C'è [nessuna differenza] (http://blogs.msdn.com/b/csharpfaq/archive/2004/03/12/what-s-the-difference-between-code-string-code-and -code-system-string-code.aspx) tra 'string' e' System.String'. È una preferenza per gli sviluppatori. – vcsjones

9

Ricercate String.Join():

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

String.Join Metodo (String, String[])

  Concatena tutti gli elementi di una matrice di stringhe, utilizzando il separatore specificato tra ogni elemento.

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

Utilizzare il metodo string.Join, molto utile.

String.Join(",", my_array) 
2

Usa:

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

Perché il downvote? Questa sembra essere una soluzione sensata. (Anche se "separatore" è errato.) –

+0

Sono decisamente + 1 su questo. Questo è quello che faccio la maggior parte del tempo per risolvere questo tipo di problema, anche se di solito uso uno StringBuilder e foreach – Fede

+0

Eric, ti piace questa soluzione? Sento che l'impostazione del separatore in ogni iterazione rende il codice molto difficile da leggere. [E no, non ho votato, ma non voterò nemmeno questa risposta.] – SolutionYogi

6

Esiste un modo migliore o più ordinato per raggiungere questo obiettivo? Mi piace usare un ciclo foreach, ma questo stampa una virgola anche dopo l'ultimo elemento, il che è indesiderabile.

Come altri hanno già detto, Join fa la cosa giusta. Ma ecco un altro modo di pensare al problema che potrebbe aiutarti in futuro. Invece di pensare al problema come mettere una virgola dopo ogni elemento tranne l'ultimo elemento - che si nota correttamente rende difficile lavorare con il ciclo "foreach" - pensa al problema come metti una virgola prima di ogni elemento tranne il primo elemento. Ora è facile da fare con un ciclo foreach!

Per circa un milione in più modi per risolvere un problema simile vedere:

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

E il post originale:

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

+0

L'ho effettivamente considerato come un "mettere una virgola prima di ogni elemento tranne il primo" e ancora non sono stato in grado di risolverlo con un foreach. Forse mi manca qualcosa di ovvio. Esaminando ora i tuoi collegamenti per, si spera, una migliore comprensione. Grazie per i link. – xbonez

+1

@xbonez: "Metti una virgola prima di ogni elemento tranne il primo" si utilizza un condizionale su un 'bool' che viene modificato all'interno del ciclo. Ad esempio, '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); 
    } 
} 
Problemi correlati