如何使用 LinQ 和 Lambda 检查字符串中的包含?

How to check contain in a string by using LinQ and Lambda?

我有两个字符串。



如何通过 LinQ 和 Lambda 检查字符串中的元音 'A, E, I, O, U' 并按照它们在字符串中的顺序导出。 例如: 字符串A校验后的结果为'O I E'

看来您正在尝试查找单词中出现的元音,您可以这样做:

Char[] vowels = new Char[] { 'a', 'e', 'i', 'o', 'u' };

string A = "HORIDE";

var VowelsFound = A.Where(x => vowels.Any(v => Char.ToUpperInvariant(v) == Char.ToUpperInvariant(x))).Distinct();

输出:

O
I
E

WORKING FIDDLE EXAMPLE

var vowels = new[]{'a', 'e', 'i', 'o', 'u'};

var vowelsInWord = "HORIDE".ToCharArray()
    .Join(vowels,
        c => Char.ToUpper(c),
        v => Char.ToUpper(v),
        (_, v) => v);

这是 LINQPad 中的结果:

PS:如果要保留首字母大写,请将 (_, v) => v 替换为 (c, _) => c

编辑

为了比较结果序列,我建议您将上面的代码放入扩展方法中,然后使用 SequenceEqual 方法来比较结果:

public static IEnumerable<char> GetVowels(this string value)
{
    var vowels = new[]{'a', 'e', 'i', 'o', 'u'};
    return value.ToCharArray()
        .Join(vowels,
            c => Char.ToUpper(c),
            v => Char.ToUpper(v),
            (_, v) => v);
}

并且在您的调用方法中只需使用:

var sameVowels = "HORIDE".GetVowels()
        .SequenceEquals("TOBRITE".GetVowels());