当前位置:  开发笔记 > 编程语言 > 正文

c#Lambda,LINQ ....改进这个方法

如何解决《c#Lambda,LINQ.改进这个方法》经验,为你挑选了2个好方法。

我正在学习更多关于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();
}

我也很欣赏其他(类似)主题的许多链接.

特别是这个话题是如此真实.



1> leppie..:

就个人而言,我认为你的方法简单明了,我会坚持下去(我想我甚至可能在某处写了完全相同的代码).

更新:

这个作为一个起点怎么样?

public IEnumerable MakeNice(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();
}



2> MartinStettn..:

这与原始代码相同,甚至避免生成第二个(小写)字符串.

var result = text.Aggregate(new StringBuilder(), 
    (sb, c) => (Char.IsUpper(c) ? sb.Append(' ') : sb).Append(c));

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有