我正在学习更多关于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(); }
我确信上面的方法可以重写为与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(); }
我也很欣赏其他(类似)主题的许多链接.
特别是这个话题是如此真实.
就个人而言,我认为你的方法简单明了,我会坚持下去(我想我甚至可能在某处写了完全相同的代码).
更新:
这个作为一个起点怎么样?
public IEnumerableMakeNice(IEnumerable 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(); }
这与原始代码相同,甚至避免生成第二个(小写)字符串.
var result = text.Aggregate(new StringBuilder(), (sb, c) => (Char.IsUpper(c) ? sb.Append(' ') : sb).Append(c));