如何使用 LinQ 和 Lambda 检查字符串中的包含?
How to check contain in a string by using LinQ and Lambda?
我有两个字符串。
- 字符串 A 是 "HORIDE"
- 字符串 B 是 "TOBRITE"
如何通过 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
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());
我有两个字符串。
- 字符串 A 是 "HORIDE"
- 字符串 B 是 "TOBRITE"
如何通过 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
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());