Bir dizenin dize listesi


206

Şunu söyleyelim:

List<string> los = new List<string>();

Bu çılgın işlevsel dünyada, bunlardan birini birleştirerek bir dize oluşturmak için bunlardan birinin en iyi olacağı bu günlerde yaşıyoruz:

String.Join(String.Empty, los.ToArray());

StringBuilder builder = new StringBuilder();
los.ForEach(s => builder.Append(s));

string disp = los.Aggregate<string>((a, b) => a + b);

veya Düz eski StringBuilder foreach

VEYA daha iyi bir yol var mı?


9
.Net 4 gibi görünüyor ayrıca ToArray () atlamak izin, bir string.join (dize, IEnumerable <string>) içerecektir msdn.microsoft.com/en-us/library/dd783876.aspx
Luke

Yanıtlar:


289

A seçeneği ile giderdim:

String.Join(String.Empty, los.ToArray());

Akıl yürütmem, Join yönteminin bu amaçla yazılmış olması. Aslında Reflector'a bakarsanız, güvenli olmayan kodun gerçekten optimize etmek için kullanıldığını göreceksiniz. Diğer ikisi de ÇALIŞIYOR, ama sanırım Katıl işlevi bu amaç için yazılmış ve en verimli olanı tahmin ediyorum. Yine de yanılmış olabilirim ...

@Nuri YILMAZ olmadan .ToArray(), ama bu .NET 4+:

String.Join(String.Empty, los);

GA! Bu seçeneği ilk bakışta bile görmedim.
Joel Coehoorn

2
StringBuilder'dan 3 kat daha hızlı mı? Vay canına, daha hızlı olacağını düşündüm, ne kadar hızlı olduğunu fark etmedim. Bu mantıklı olsa da, işaretçiler kullanarak güvenli olmayan kodda yapılır, bu yüzden ..... mantıklı.
BFree

8
Güzel! sadece açıklama: Join los.ToArray () 'a ihtiyaç duymaz, çünkü List <T> IEnumarable <T>' ı yayınlayabilir.
Nuri YILMAZ

8
@Nuri: Bu soru 08'de, Net 4 çıkmadan önce soruldu. IEnumerable <T> alan aşırı yük .Net 4'e eklendi.
BFree

2
String.Concat ile birlikte katıl Altındır. Örnek: 'String.Concat ("{", String.Join (",", m_Data), "}");'
KornMuffin

51
string.Concat(los.ToArray());

Dizeleri birleştirmek istiyorsanız, string.Join () yerine string.Concat () öğesini kullanın.


18

.Net 4.0 kullanıyorsanız sıralayıcı bir yol kullanabilirsiniz:

String.Join<string>(String.Empty, los);

10

String.Join () oldukça hızlı uygulanır ve zaten söz konusu dizelerin bir koleksiyonuna sahip olduğunuzdan, muhtemelen en iyi seçimdir. Her şeyden önce, "Bir dizi listesine katılıyorum!" Diye bağırıyor. Her zaman güzel.



5

Oyum dize.

Lambda değerlendirmelerine ve geçici işlevlerin oluşturulmasına gerek yoktur, daha az işlev çağrısı, daha az yığın itme ve patlatma.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.