比较不同结构的数据

时间:2016-07-26 12:23:10

标签: c# string list

我有string

string cubeinline = "12345123451234X1234512345";

等于List<string>

List<string> cube = new List<string>(){ "12345",
                                        "12345",
                                        "1234X",
                                        "12345",
                                        "12345"};

但不同的安排。字符串按长度分割。在这种情况下5。

现在我需要将字符串与List进行比较 - char by 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);
    }
}

5 个答案:

答案 0 :(得分:10)

==更改为!=。你在这里颠倒逻辑:程序应该在有差异时显示消息,而不是有效性!

答案 1 :(得分:1)

你可以这样做:

Map

答案 2 :(得分:1)

我通常会将LINQ用于此目的。在这种方法中,您使用SequenceEqual方法检查两个序列(一个是cube,一个是Splitted字符串为5个大小)并通过比较元素来检查两个序列是否相等:

bool res = cube.SequenceEqual(Enumerable.Range(0, cubeinline.Length / 5)
    .Select(i => cubeinline.Substring(i * 5, 5)));

答案 3 :(得分:0)

将您的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);
}

答案 4 :(得分:0)

将字符串存储在列表中的原因是什么?即使必须将它们保留在列表中,也可以使用string temp变量将列表中的字符串组合成单个字符串,然后使用String.Equals方法比较字符串和临时字符串。

此方法更适合比较基于值的字符串,因为==检查引用相等性。继承人another question you should check out