我有两个字符串
喜欢
"0101000000110110000010010011" and
"0101XXXXXXX101100000100100XX"
Run Code Online (Sandbox Code Playgroud)
它应该比较每个字符,不应该考虑字符是否为X.
对于上面两个字符串,结果是真的.
现在我正在使用
迭代字符串的长度并用X替换第一个字符串中的相应字符
有什么方法可以使用LINQ来做到这一点
这在.NET 4中相当容易,Zip方法如下:
using System;
using System.Linq;
class Test
{
static void Main()
{
string a = "0101000000110110000010010011";
string b = "0101XXXXXXX101100000100100XX";
var equal = !(a.Zip(b, (x, y) => new { x, y })
.Where(z => z.x != z.y && z.x != 'X' && z.y != 'X')
.Any());
Console.WriteLine(equal);
}
}
Run Code Online (Sandbox Code Playgroud)
这基本上将两个字符串拉到一起(将它们视为字符序列),因此我们最终得到了对的序列.然后我们尝试找到值不同的任何对,并且值都不是'X'.如果存在任何这样的对,则字符串不相等; 否则他们是平等的.
编辑:进一步思考,我们可以反转谓词并使用All:
var equal = a.Zip(b, (x, y) => new { x, y })
.All(z => z.x == z.y || z.x == 'X' || z.y == 'X');
Run Code Online (Sandbox Code Playgroud)
如果你不使用.NET 4,你可以使用Zip 的MoreLINQ实现,它基本上允许你做同样的事情.
或者,您可以使用它们的索引器压缩字符串,如下所示:
var equal = Enumerable.Range(0, a.Length)
.Select(i => new { x = a[i], y = b[i] })
.All(z => z.x == z.y || z.x == 'X' || z.y == 'X');
Run Code Online (Sandbox Code Playgroud)
这感觉好像有点作弊,但它确实有效.请注意,在所有这些示例中,我假设您已经检查过输入字符串的长度是否相同.
| 归档时间: |
|
| 查看次数: |
2811 次 |
| 最近记录: |