2013-08-09 2 views
10

List<string[]> türünde bir örneğim var. Bunu, bir satırda her bir string[] ile bir dizeye dönüştürürdüm. Listeyi düzleştirmek için aşağıdaki LINQ sorgusunu kullanıyorum ancak her string[] arasındaki sorgunun çok daha çirkin bir şekilde genişletilmeden nasıl yeni bir satır ekleyebileceğimi bilmiyorum. Sorgulama yapmadan ve foreach döngüsünde String.Join veya IEnumberable.Aggregate döngüsünü kullanmadan bunu yapmanın bir yolu var mı?Düz liste <string[]> her bir öğe için tek bir dizeyle tek bir dize

results.SelectMany(x => x).Aggregate((c, n) => c + ", " + n) 
+0

Bazı örnek çıktılar sağlayabilir misiniz? Giriş de güzel olurdu. – Xcelled194

+0

@ Xcelled194 Yapabilirim ama zaten iki çalışma cevabı var. – evanmcdonnal

+1

Yorumu yayınladığımda yoktu. : P Aynı problemle gelecekteki araştırmacılara yardımcı olmak için yine de biraz eklemelisiniz. – Xcelled194

cevap

40
String.Join(Environment.NewLine, results.Select(a => String.Join(", ", a))); 

Komple örnek:

var results = new List<string[]> { 
    new[]{"this", "should", "be", "on"}, 
    new[]{"other", "line"} 
}; 

var result = String.Join(Environment.NewLine, 
         results.Select(a => String.Join(", ", a))); 

Sonuç:

this, should, be, on 
other, line 

GÜNCELLEME İşte toplama doğru yapılır - bu tek st inşa etmek StringBuilder kullanır bellekte çalma

results.Aggregate(new StringBuilder(), 
        (sb, a) => sb.AppendLine(String.Join(",", a)), 
        sb => sb.ToString()); 
+1

İyi bir çağrı ... Çözümün ne kadar basit olduğunu gördükten sonra soruyu soran aptal hissediyorum: | – evanmcdonnal

+1

@evanmcdonnal yep :) BTW String.Join ayrıca etkilidir - katılırken tonlarca tel üretmiyor. –

+0

Aslında 'String.Join' ve 'Agrega' tarafından üretilen IL'deki farklılıklar hakkında başka bir soru açmayı düşünüyorum… Belki de zorundayım. NET'te – evanmcdonnal

3
results.Select(sa => sa.Aggregate((a, b) => a + ", " + b)) 
     .Aggregate((c, d) => c + Enviroment.NewLine + d); 
+4

Bu çözümün, * String.Join kullanarak, yayınlanan diziden * çok fazla * daha az verimli olduğunu unutmayın. hafızanın – Servy