2016-05-27 7 views
0

Ich bin LINQ unglaublich neu, in der Tat ... Ich bin so neu, ich habe gerade herausgefunden, dass alles vor dem Punkt durch die aufgerufene Methode übergeben wird."System" -Code zu "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; 
    } 
} 

Ich frage mich, wie ich dies auf eine „einfache“ LINQ Variante umwandeln kann, und wenn es mit LINQ schneller sein würde (wie ich große und schnelle Dinge über LINQ gehört.). hier

+0

könnten Sie einen sample-Wert für 'input' hinzufügen, damit wir eine Vorstellung davon bekommen, was Sie erreichen möchten? LINQ ist nicht etwas, das speziell dafür entwickelt wurde, die Manipulation/Verkettung von Strings an erster Stelle zu optimieren, daher könnte es andere Optionen geben. Der Großteil der Arbeit scheint hier eine Verkettung zu sein, daher sollten Sie einen 'StringBuilder' für die' reStr'-Variable verwenden. – dlatikay

+0

Ein Teil von LINQ, möglicherweise möchten Sie über [StringBuilder] (https://msdn.microsoft.com/en-us/library/system.text.stringbuilder (v = vs.110) .aspx) lesen. – aloisdg

+0

@dlatikay Ich habe eine zweite Abfrage für SongDecoder() hinzugefügt. Ist das anders? – sxbrentxs

Antwort

4

Keine LINQ erforderlich

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

Leider :(LINQ ist sehr nützlich, aber ich schlage vor, Sie darüber zu lesen.


Ok, ich zugegebenermassen, wenn Sie wirklich wollen verwenden LINQ gibt es immer Aggregate

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

Lesen Sie hier mehr: LINQ Aggregate algorithm explained

+0

Denken Sie daran, dass LINQ nicht immer die beste Wahl ist, da es manchmal die Leistung verringern kann. In einigen Fällen könnte eine einfache Schleife besser funktionieren. – Bauss