我正在学习更多关于LINQ和Lambda表达式的过程,但在这个阶段,我根本就没有"获取"Lambda表达式.
是的......我是这些新概念的新手.
我的意思是,我看到的每个例子都说明了如何添加或减去参数.
那些更复杂的东西怎么样?
为了帮助我获得更好的理解,我已经为希望参与的任何人发布了一个小挑战.我有以下方法将接受任何字符串,并将空格放在任何大写字符和它们的前一个邻居之间(如下所示).
即
"SampleText"="Sample Text"
"DoesNotMatterHowManyWords"="不重要多少字"
这是代码;
public static string ProperSpace(string text)
{
var sb = new StringBuilder();
var lowered = text.ToLower();
for (var i = 0; i < text.Length; i++)
{
var a = text.Substring(i, 1);
var b = lowered.Substring(i, 1);
if (a != b) sb.Append(" ");
sb.Append(a);
}
return sb.ToString().Trim();
}
Run Code Online (Sandbox Code Playgroud)
我确信上面的方法可以重写为与LINQ或Lambda表达式一起使用.我希望这项练习能够帮助我开启这些新概念.
此外,如果您有任何LINQ或Lambda教程的良好链接,请提供.
编辑
感谢所有贡献的人.虽然当前的方法确实可以完成这项工作,但我很高兴看到它可以被修改为使用lambda表达式.我也承认这可能不是LINQ的最佳例子.
这是使用Lambda表达式的新更新方法(经测试可用);
public static string ProperSpace(string text)
{
return text.Aggregate(new StringBuilder(), (sb, c) =>
{
if (Char.IsUpper(c)) sb.Append(" ");
sb.Append(c);
return sb;
}).ToString().Trim();
}
Run Code Online (Sandbox Code Playgroud)
我也很欣赏其他(类似)主题的许多链接.
特别是这个话题是如此真实.
就个人而言,我认为你的方法简单明了,我会坚持下去(我想我甚至可能在某处写了完全相同的代码).
更新:
这个作为一个起点怎么样?
public IEnumerable<char> MakeNice(IEnumerable<char> str)
{
foreach (var chr in str)
{
if (char.ToUpper(chr) == chr)
{
yield return ' ';
}
yield return chr;
}
}
public string MakeNiceString(string str)
{
return new string(MakeNice(str)).Trim();
}
Run Code Online (Sandbox Code Playgroud)
这与原始代码相同,甚至避免生成第二个(小写)字符串.
var result = text.Aggregate(new StringBuilder(),
(sb, c) => (Char.IsUpper(c) ? sb.Append(' ') : sb).Append(c));
Run Code Online (Sandbox Code Playgroud)