【问题标题】:"System"-code to "System.Linq"-code“系统”-代码到“System.Linq”-代码
【发布时间】: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() 添加了第二个查询。这有什么不同吗?

标签: c# linq code-conversion


【解决方案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 可能并不总是最佳选择,因为它有时会降低性能。在某些情况下,一个简单的循环可能会执行得更好。
猜你喜欢
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多