2016-05-27 1 views
0

私は信じられないほど新しいLINQです。実際には...私はとても新しく、ドットの前のすべてが呼び出されたメソッドに渡されていることを理解しました。"System" -code "System.Linq" -code

using System; 

public class Program 
{ 
    public static void Main() 
    { 
     Console.WriteLine(SongDecoder("WUBWUBABCWUB")); 
     Console.WriteLine(SongDecoder("RWUBWUBWUBLWUB")); 
    } 

    public static string SongDecoder(string input) 
    { 
     string[] s = input.Split(new string[] { "WUB" }, StringSplitOptions.RemoveEmptyEntries); 

     string reStr = ""; 
     for (int i = 0; i < s.Length; i++) 
     if(i == s.Length - 1) 
      reStr += s[i]; 
     else 
      reStr += s[i] + " "; 

     return reStr; 
    } 
} 

私は、「シンプル」LINQのバリアントに、それは(私はLINQの素晴らしいと高速なことを聞​​いたよう。)LINQで高速になりたい場合は、これを変換することができますどのように思ったんだけど。

+0

私たちはあなたが達成しようとしていることのアイデアを得ることができるように 'input'にsampe値を追加できますか? LINQは、最初に文字列操作/連結を最適化するように特別に設計されたものではないため、他のオプションもあります。ここでの作業のほとんどは連結されているようですので、 'reStr'変数に' StringBuilder'を使うことを検討してください。 – dlatikay

+0

LINQの一部ですが、[StringBuilder](https://msdn.microsoft.com/en-us/library/system.text.stringbuilder(v = vs.110).aspx)についてお読みください。 – aloisdg

+0

@dlatikay SongDecoder()の2番目のクエリを追加しました。それは違うのですか? – sxbrentxs

答えて

4

ませLINQを使う本当にがしたい場合は[OK]を、私は、conceedここ

var reStr = String.Join(" ", 
       input.Split(new string[] {"WUB"}, StringSplitOptions.RemoveEmptyEntries)); 

申し訳ありません:(LINQは、私はあなたがそれについて読むことをお勧め、しかし非常に便利です。


を必要としませんLINQを使用する常にありますAggregate

var retStr = input.Split(new string[] {"WUB"}, StringSplitOptions.RemoveEmptyEntries)) 
        .Aggregate ((a,b) => a + " " + b); 

もっと読むここをクリックしてください:LINQ Aggregate algorithm explained

+0

パフォーマンスが低下することがあるので、LINQが必ずしも最良の選択であるとは限りません。場合によっては、単純なループがより良いパフォーマンスを発揮します。 – Bauss

関連する問題