Как ограничить поиск символов, если я использую LINQ - PullRequest
1 голос
/ 13 марта 2011

У меня есть функция, которая возвращает дублированные (встречаются 2 или более раз) символы в тексте. Я делаю это с 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 .... и т. Д. Спасибо за помощь.

Ответы [ 4 ]

1 голос
/ 13 марта 2011

Это то, что вам нужно.

// 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;
}
1 голос
/ 13 марта 2011
    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();
1 голос
/ 13 марта 2011

Похоже, что char.IsLetter () это то, что вы хотите: char.IsLetter ()

1 голос
/ 13 марта 2011

Как-то так?

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() позволит также проходить символы из других алфавитов (например, кириллицы, греческого и т. Д.), Так что это может быть не идеально.

Следующая лучшая вещь w/ o передача настраиваемого списка - это решение @ Femaref imo, явно использующее коды символов английского алфавита - это может лучше всего работать в вашей конкретной проблеме.

...