2015-11-02 24 views
6

Esiste un modo per convertire un elenco di stringhe in una stringa separata da virgole?Converti array di stringhe in stringhe separate da virgole con concatenazione aggiuntiva

String[] data = new String[] { "test", "abc", "123" } 

convertire in:

'test', 'abc', '123' 

Possibili soluzioni:

  1. Surround ogni stringa con '' e quindi utilizzare String.join sulla lista.
  2. Foreach ogni stringa nella lista e fare la concatenazione di '' e ',' e alla fine togliere ultima ','

C'è qualche semplice Linq (un'espressione riga) fare entrambe le cose?

+0

Usa 'var x = string.join ("", yourArray);' – slugster

+0

@slugster, spero ne ho parlato nei miei approcci – Reddy

+0

Nota a margine: assicurarsi che non sta cercando di costruire JSON ... può endup con ruota quadrata reinventata. –

risposta

15

C'è qualche semplice Linq (un'espressione linea) per fare entrambe le cose.

string.Join(",", data.Select(item => "'" + item + "'")) 

Nozioni di base di Linq: Le trasformazioni sono Select dichiarazioni. I filtri sono dichiarazioni Where.

Detto questo, sono disponibili molti strumenti di manipolazione delle stringhe che non sono Linq e sono più ottimizzati per le stringhe, quindi li guarderei sempre prima di guardare a Linq.

+2

Ho collegato a un'altra domanda che è stata cancellata - http://stackoverflow.com/a/33471600/232593 - Penso che il loro codice abbia probabilmente prestazioni migliori del mio, anche se non usa Linq. 'return" '"+ stringa.Join ("','", data) + "'"; ' –

+2

@AsadSaeeduddin - se si desidera annullare l'eliminazione della risposta, so che l'avrei invitata personalmente, anche se non è stato trovato alcun Linq. –

+2

Penso anche che l'uso di linq ovunque non sia buono. Quando guardi i metodi linq dall'interno vedrai che fai casino nel tuo programma solo per fare un semplice conteggio! –

3

È possibile utilizzare LINQ aggregato

Array.Skip(1).Aggregate(Array[0],(a,b) => string.Format("{0},'{1}'",a,b)); 
+0

Soluzione intelligente. ancora esplorando/imparando 'linq' :) – Reddy

+0

Mentre sei alla ricerca intelligente, non usarlo mai per codice reale con più di un paio di elementi a causa delle prestazioni di O (n^2) ... –

1
String[] data = new String[]{"test","abc","123"}; 
var result = string.Join(",", data.Select(o => string.Concat("'",o,"'")); 
+0

Preferenza di stile - perché dovresti usare' Concat 'over' + 'che genera codice identico? –

+2

@AlexeiLevenkov per me, è più facile leggere gli argomenti ',' -separati, in particolare quando contiene altre operazioni come '+' e 'condition? vero: falso'. per esempio confronta '" a "+ ((a> 1)?" si: "+ variabile:" nessuno ") +" b "' e 'string.Concat (" a ", (a> 1)?" si : "+ variabile:" no "," b ")' – Backs

0

Si potrebbe anche utilizzare il metodo aggregato: Esempio:

List<string> fruit = new List<string> {"Apple", "Orange", "Pear", "Tomato", "Banana"}; 
var fruitSentence = fruit.Aggregate((current, next) => $"{current},{next}"); 
0

NOTA: se si sta iniziando con IEnumerable o simile si deve chiamare .ToArray() alla fine della dichiarazione LINQ come questo :

input parameter: IEnumerable<string> feederIdList  

var feederListString = String.Join(",", feederIdList.Select(feeder => "\"" + feeder + "\"").ToArray()); 

Nel mio caso avevo bisogno che ogni stringa avesse le virgolette doppie per passare in una stored procedure Oracle in seguito.