比较不同结构的数据

本文关键字:数据 结构 比较 | 更新日期: 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方法比较字符串和临时字符串。

==检查引用相等性时,此方法更适合基于值比较字符串。这是你应该核实的另一个问题。