我想验证字符串是否包含相邻位置中的任何重复字符(来自一组坏字符).此主题的先前堆栈溢出答案似乎主要是一般形式:
for(int i = 0; i < testString.Length-1; i++){
if(testString[i] == testString[i+1] && testString[i] == badChar){
//Handle rejection here
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以在LINQ中进行此类验证/验证?更一般地说:LINQ中是否可以将字符串中每个字符的值与a中的下一个字符进行比较
testString.Any(c => /*test goes here*/) 呼叫?
你可以使用Pairwise从moreLINQ库:
if(testString.Pairwise((n, m) => new {n, m}).Any(x => x.n == x.m && x.n == badChar))
// do something
Run Code Online (Sandbox Code Playgroud)
如果你想使用纯LINQ你可以使用Skip/ Zip组合破解它:
if(testString.Zip(testString.Skip(1), (n, m) => new {n, m})).Any(x => x.n == x.m && x.n == badChar))
// do something
Run Code Online (Sandbox Code Playgroud)
但是这两种解决方案都比for基于循环的解决方案慢得多,所以我建议不要这样做.
只要您有一个具有Count(或等效)属性和索引器的类,您就可以用作Enumerable.RangeLINQ 查询的基础,并在索引访问中执行类似于非 LINQ 代码的操作:
bool test = Enumerable.Range(0, testString.Length - 1).Any(i = >
testString[i] == testString[i + 1] && testString[i] == badChar)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
284 次 |
| 最近记录: |