c# - 如何用 lambda 解决这个问题

标签 c# lambda

问题是:

"编写一个程序,从文本中提取所有回文单词,例如 ABBA"、"lamal"、"exe"。 "

这是我的代码:

public static List<string> FindPalindromes()
    {
        string text = String.Empty;
        Console.Write("Enter the text:\n\t");
        text = Console.ReadLine();

        List<string> answer = new List<string>();

        string[] words = text.Split('.', ',', ' ', ':', '/', '\\', '"', ';');
        foreach(string word in words.Where(
                (string x) =>
                {
                    if(String.Equals(x, x.Reverse()))
                        return true;
                    else
                        return false;
                }
            ))
            answer.Add(word);

        return answer;
    }

现在我认为,如果我将 where 方法中的逻辑分离到一个返回 bool 值并检查单个单词是否为回文的单独方法中,它会更整洁。但我想尝试使用 lambda。

无论如何,这段代码不会返回任何东西。我怀疑问题出在 if 条件上。

最佳答案

x.Reverse()正在调用 Enumerable.Reverse() ,这将返回一个 IEnumerable<char> - 不是 字符串。这就是为什么 Equals永远不会回来 true .这是一个替代方案:

char[] chars = x.ToCharArray();
Array.Reverse(chars);
return x == new string(chars);

或者您可以直接调用 string.Joinstring.Concat在相反的字符序列上 - 效率极低,但它会在一个表达式中完成工作,允许您替换 foreach 中的所有内容之后:

return words.Where(x => x == string.Concat(x.Reverse())
            .ToList();

更简洁 :) 每当您发现自己反复添加到列表中时,请考虑使用查询和 ToList() .你已经有了过滤部分,你只需要使用 ToList()摆脱 foreach循环。

同样,任何时候你发现自己:

if (condition)
    return true;
else
    return false;

...强烈考虑重构为:

return condition;

关于c# - 如何用 lambda 解决这个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24685765/

相关文章:

c# - 在导入 SQL Server 之前验证 CSV 文件

c# - 如何在 Sitecore 中覆盖 Image.BrowseImage()

c# - 在运行时将 lambda 转换为委托(delegate)

c++ - 如何解开 C++ lambda 的错位名称?

c# - 我可以避免或优化这种动态调用吗?

c# - 从 RadGrid 中删除编辑、更新和取消链接

c# - ASP.NET 核心 2 : Ajax calls to API with [Authorize] fail the preflight request

java - 如何根据元素之和对包含整数列表的列表进行排序

amazon-web-services - 如何防止 API 返回指数增加的转义字符串?

java - groovy 无法通过方法调用解析