“系统”-代码到“System.Linq”-代码

Posted

技术标签:

【中文标题】“系统”-代码到“System.Linq”-代码【英文标题】:"System"-code to "System.Linq"-code 【发布时间】:2016-05-27 15:33:07 【问题描述】:

事实上,我对 LINQ 非常陌生……我太新了,我才发现点之前的所有内容都传递给了被调用的方法。

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 的好消息。)。

【问题讨论】:

您能否为input 添加一个示例值,以便我们了解您想要实现的目标? LINQ 并不是专门为首先优化字符串操作/连接而设计的,因此可能还有其他选择。这里的大部分工作似乎都是串联,因此请考虑将StringBuilder 用于reStr 变量。 LINQ 的一部分,您可能想了解一下StringBuilder。 @dlatikay 我为 SongDecoder() 添加了第二个查询。这有什么不同吗? 【参考方案1】:

这里不需要 LINQ

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

【讨论】:

请记住 LINQ 可能并不总是最佳选择,因为它有时会降低性能。在某些情况下,一个简单的循环可能会执行得更好。

以上是关于“系统”-代码到“System.Linq”-代码的主要内容,如果未能解决你的问题,请参考以下文章

Linq源代码阅读

vs2013c#测试using System; using System.Collections.Generic; using System.Linq; using System.Text; usin

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.

Enumerable.First (System.Linq) C# 的替代方案

在C#编程的时候,发现system.linq与system.xml.linq无法进行生成,错误原因是缺少引用?

s-s-rS 2008 的定制组装