比较不同结构的数据
本文关键字:数据 结构 比较 | 更新日期: 2023-09-27 17:58:43
我有一个string
string cubeinline = "12345123451234X1234512345";
其等于CCD_ 2
List<string> cube = new List<string>(){ "12345",
"12345",
"1234X",
"12345",
"12345"};
但安排不同。绳子按长度分开。在这种情况下5。
现在我需要逐个比较这个字符串和List-char。但是我的方法说每个字符都是无效的。
int maxLength = 5;
for (int i = 0; i < cubeinline.Length; i++)
{
if (cubeinline[i] == cube[i / maxLength][i % maxLength])
{
Console.WriteLine("Error in char" + i);
}
}
将==
更改为!=
。这里的逻辑相反:当存在差异时,程序应该显示消息,而不是相等!
您可以这样做:
string cubeinline = "12345123451234X1234512345";
List<string> cube = new List<string>(){ "12345",
"12345",
"1234X",
"12345",
"12345"};
bool isEqual = cubeinline == string.Concat(cube);
我通常为此目的使用LINQ。在这种方法中,您使用的是SequenceEqual
方法,该方法检查两个序列(一个是cube
,一个是拆分为5大小的字符串),并通过比较元素来检查两个顺序是否相等:
bool res = cube.SequenceEqual(Enumerable.Range(0, cubeinline.Length / 5)
.Select(i => cubeinline.Substring(i * 5, 5)));
将if条件更改为
if ( cubeinline[i] != cube[i / maxLength][i % maxLength] )
{
Console.WriteLine ("Error in char" + i);
}
或者请添加其他条件,
if ( cubeinline[i] == cube[i / maxLength][i % maxLength] )
{
Console.WriteLine ("Match found at " + i);
}
else
{
Console.WriteLine ("Error in char" + i);
}
将字符串存储在列表中的原因是什么?即使必须将它们保留在列表中,也可以使用string temp
变量将列表中的字符串组合为一个字符串,然后使用String.Equals
方法比较字符串和临时字符串。
当==
检查引用相等性时,此方法更适合基于值比较字符串。这是你应该核实的另一个问题。