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"

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


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).


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.