C # Lista <ciąg> do łańcucha z separatorem

631

Czy jest funkcja w C #, aby szybko przekonwertować część kolekcji na ciąg i oddzielić wartości za pomocą separatora?

Na przykład:

List<string> names -> string names_together = "John, Anna, Monica"

nan
źródło

Odpowiedzi:

1201

Możesz użyć String.Join. Jeśli masz List<string>, możesz ToArraynajpierw zadzwonić :

List<string> names = new List<string>() { "John", "Anna", "Monica" };
var result = String.Join(", ", names.ToArray());

W .NET 4 nie potrzebne ToArrayjuż, ponieważ nie jest przeciążenie String.Join, która pobiera IEnumerable<string>.

Wyniki:


John, Anna, Monica

Kwatermistrz
źródło
95

Możesz to również zrobić za pomocą linq, jeśli chcesz

var names = new List<string>() { "John", "Anna", "Monica" };
var joinedNames = names.Aggregate((a, b) => a + ", " + b);

Chociaż wolę składnię inną niż linq w odpowiedzi Quartermeistera i myślę, że Aggregatemoże działać wolniej (prawdopodobnie więcej operacji łączenia łańcuchów).

Kok
źródło
19
Dzięki za szybkie odpowiedzi, oba działają dobrze. Masz rację, zrobiłem mały pomiar wydajności przy użyciu klasy Stopwatch, a metoda linq jest znacznie wolniejsza: String.Join (",", names.ToArray ()); -> wziął 18 tyknięć Agregat ((a, b) => a + "," + b) -> wziął 736 tyknięć
nan
2
Tak, myślę, że Aggregatelepiej jest do operacji typu Math. W przypadku łańcuchów ta operacja jest podobna do for eachdodawania i dodawania do ciągu, który jest bardzo powolny i nieefektywny, ponieważ tworzysz nowy ciąg dla każdego elementu, który istnieje na liście.
Bob
Pamiętaj, że agregacja bez wartości początkowej spowoduje zgłoszenie wyjątku InvalidOperationException, jeśli kontener jest pusty. Użyj zagnieżdżonej wersji agregującej (seed, func), aby uniknąć kodu obsługi błędów lub kontroli warunkowych. String.Join nie rzuca się na pusty, więc nie jest wymagane żadne ziarno ani dodatkowy kod ... a ponadto nie wymaga Linq, a składnia jest nieco jaśniejsza.
Huacanacha,
1
Agregacja w powyższym przykładzie może działać szybciej, jeśli użyjesz StringBuilder. Używanie „+” do wykonywania wielokrotnej konkatenacji nie jest zalecane. Zobacz sekcję Uwagi tutaj ( msdn.microsoft.com/en-us/library/… )
Ilya Denisov