如果我使用 LINQ 如何限制搜索字符

发布于 2024-10-21 19:09:44 字数 389 浏览 2 评论 0原文

我有一个函数可以返回文本中重复的(出现两次或多次)字符。我使用 LINQ 执行此操作:

 public char[] linq(string text)
    {            
        char[] result = text
            .GroupBy(x => x)
            .Where(g => g.Count() > 1)
            .Select(g => g.Key).ToArray();
        return result;
    }  

但这种方式会返回文本(字符串)中所有字符的重复出现。如果我只想搜索英文字母字符,如何限制搜索:abcdefghi....等。 感谢您的帮助。

I have a function that returns duplicated (occur 2 or more times) characters in text. I do it with LINQ:

 public char[] linq(string text)
    {            
        char[] result = text
            .GroupBy(x => x)
            .Where(g => g.Count() > 1)
            .Select(g => g.Key).ToArray();
        return result;
    }  

But this way returns duplicated occurrences of all characters in the text (string). How to limit searching, if I want to search just English alphabet characters: abcdefghi....etc.
Thanx for help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

刘备忘录 2024-10-28 19:09:44

像这样的东西吗?

linq("and a rhino 11", new char[] { 'a', 'b', 'c' }); // result: { 'a' }

public char[] linq(string text, char[] limitChars)
{
    char[] result = text
        .Where( c => limitChars.Contains(c))
        .GroupBy(x => x)
        .Where(g => g.Count() > 1)
        .Select(g => g.Key)
        .ToArray();
    return result;
}  

仅当您需要将字符范围限制为可配置列表时,此解决方案才适用。

请注意,char.IsLetter() 方法也将允许其他字母表(即西里尔字母、希腊语等)的字符通过,因此这可能并不理想。

没有传递可配置列表的下一个最好的事情是 @Femaref 的解决方案,在我看来明确使用英文字母的字符代码 - 这可能最适合您的特定问题。

Something like this?

linq("and a rhino 11", new char[] { 'a', 'b', 'c' }); // result: { 'a' }

public char[] linq(string text, char[] limitChars)
{
    char[] result = text
        .Where( c => limitChars.Contains(c))
        .GroupBy(x => x)
        .Where(g => g.Count() > 1)
        .Select(g => g.Key)
        .ToArray();
    return result;
}  

This solution only applies if you need to limit the character range to a configurable list.

Note that the char.IsLetter() method will allow characters from other alphabets (i.e. cyrillic, greek, etc.) to pass as well, so this might not be ideal.

Next best thing w/o passing a configurable list is @Femaref's solution imo explicitly using the character codes of the English alphabet - this might work best in your particular problem.

如果没有你 2024-10-28 19:09:44

看起来 char.IsLetter() 就是你想要的: char.IsLetter()

Looks like char.IsLetter() is what you want: char.IsLetter()

束缚m 2024-10-28 19:09:44

这就是你所需要的。

// http://msdn.microsoft.com/en-us /library/system.char.isletter.aspx

private static void Main(string[] args)
{
    Console.WriteLine(linq(@"szuizu_4156424324_hjvlahsjlvhlkd_&&§"));
    Console.Read();
}

public static char[] linq(string text)
{
    char[] result = text
                .Where(Char.IsLetter)
                .GroupBy(x => x)
                .Where(g =>g.Count() > 1)
                .Select(g => g.Key).ToArray();

    return result;
}

This is what you need.

// http://msdn.microsoft.com/en-us/library/system.char.isletter.aspx

private static void Main(string[] args)
{
    Console.WriteLine(linq(@"szuizu_4156424324_hjvlahsjlvhlkd_&&§"));
    Console.Read();
}

public static char[] linq(string text)
{
    char[] result = text
                .Where(Char.IsLetter)
                .GroupBy(x => x)
                .Where(g =>g.Count() > 1)
                .Select(g => g.Key).ToArray();

    return result;
}
知足的幸福 2024-10-28 19:09:44
    char[] result = text
        .GroupBy(x => x)
        .Where(g => g.Count() > 1 && (g.Key >= 65 && g.Key <= 122))
        .Select(g => g.Key).ToArray();

评论更新:

    char[] result = text
        .GroupBy(x => x)
        .Where(g => g.Count() > 1 && ((g.Key >= 65 && g.Key <= 90) || (g.Key >= 97 && g.Key <= 122)))
        .Select(g => g.Key).ToArray();
    char[] result = text
        .GroupBy(x => x)
        .Where(g => g.Count() > 1 && (g.Key >= 65 && g.Key <= 122))
        .Select(g => g.Key).ToArray();

Update from comments:

    char[] result = text
        .GroupBy(x => x)
        .Where(g => g.Count() > 1 && ((g.Key >= 65 && g.Key <= 90) || (g.Key >= 97 && g.Key <= 122)))
        .Select(g => g.Key).ToArray();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文