LINQを使用して文字列を連結する 質問する

LINQを使用して文字列を連結する 質問する

昔ながらの書き方で最も効率的な方法は何ですか?

StringBuilder sb = new StringBuilder();
if (strings.Count > 0)
{
    foreach (string s in strings)
    {
        sb.Append(s + ", ");
    }
    sb.Remove(sb.Length - 2, 2);
}
return sb.ToString();

...LINQ で?

ベストアンサー1

この回答は、Aggregate質問で要求されたLINQ()の使用法を示しており、日常的な使用を意図したものではありません。これはを使用していないため、StringBuilder非常に長いシーケンスではパフォーマンスがひどくなります。通常のコードでは、String.Join他の答え

集計クエリは次のように使用します。

string[] words = { "one", "two", "three" };
var res = words.Aggregate(
   "", // start with empty string to handle empty list case.
   (current, next) => current + ", " + next);
Console.WriteLine(res);

出力は次のようになります:

、 1 2 3

集計は、値のコレクションを受け取り、スカラー値を返す関数です。T-SQLの例には、min、max、sumなどがあります。VBとC#はどちらも集計をサポートしています。VBとC#はどちらも集計を拡張メソッドとしてサポートしています。ドット表記法を使用すると、IEnumerable物体。

集計クエリはすぐに実行されることに注意してください。

詳しくは -MSDN: 集計クエリ


本当に使いたいのであれば、コメントで提案されているAggregateバリアントを使用してください。StringBuilderコードモンキーキングString.Joinこれは、多数のオブジェクトに対して優れたパフォーマンスを発揮する通常のコードとほぼ同じです。

 var res = words.Aggregate(
     new StringBuilder(), 
     (current, next) => current.Append(current.Length == 0? "" : ", ").Append(next))
     .ToString();

おすすめ記事