“系统”-代码到“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”-代码的主要内容,如果未能解决你的问题,请参考以下文章
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# 的替代方案