将两个列表与订单更改进行比较

时间:2013-06-20 13:07:13

标签: c# algorithm comparison

我希望能够比较两个列表,看看这些值的顺序是否相同。

例如,如果我有一个包含字段的表和一个如下的订单:

Field -- Order

F1 -- 1

F2 -- 2

F3 -- 3

F4 -- 4

和另一个:

Field -- Order

F1 -- 3

F2 -- 2

F3 -- 1

F4 -- 4

我希望能够返回包含更改顺序的所有行的列表,在这种情况下,它将是F1和F3。

我想到这样做的方法是比较订单字段的上一个和下一个值,因此如果它们都不同,那么订单就会发生变化。我还必须考虑任何增加或删除的值。

ETA: 我想通过考虑可能的添加或删除来澄清我的意思。

说第二个表现在看起来像:

Field -- Order

F1 -- 1

F3 -- 3

F4 -- 4

因为某些内容已被删除。订单值没有改变,但F3现在正好在F1之后。与F4相同。

所以我希望我的结果显示F3和F4已经改变。

2 个答案:

答案 0 :(得分:1)

这将检查2个列表之间是否相等

bool AreSame = list1.SequenceEqual(list2);

这是订购它们而不重复成员:

var union = (from s in list1 select s).Union(from s1 in list2 select s1).OrderBy(x => x);
//this is based if its list of strings for example 
//this next you select some property
var union = (from s in list1 select s.SomeProperty).Union(from s1 in list2 select s1.SomeProperty).OrderBy(x => x);

接下来将返回一个布尔值的可触发值,其中true表示不同的项目ex:if result为true,false,false,true表示在2个列表中第一个和第四个元素不同。

var some = list1.Zip(list2, (a, b) => a.SomeProperty != b.SomeProperty);

答案 1 :(得分:0)

我觉得这是一个功课问题:P所以我会给你半个代码答案;)。

编辑:这对我来说并不重要:P

List<int> checkList = new List<int>();

for (var i = 0; i < list1.Count; i++)
{
    if (list1[index] != list2[index])
    {
        checkList.Add(list1[index]);
    }
}
// checkList will be your answer.

Edit2:这个怎么样?

List<int> checkList = new List<int>();
int[] firstList = new int[list1.Count];
int[] scndList = new int[list2.Count];
// Structure data
for (var i = 0; i < firstList.Length; i++)
{
    firstList[list1.Fvalue] = list1.intValue;
    scndList[list2.Fvalue] = list2.intValue;
    // Fvalue is that f, you can use substring and int parsing for that.
}

for (var i = 0; i < list1.Count; i++)
{
    if (firstList[index] != scndList[index])
    {
        checkList.Add(firstList[index]);
    }
}
// checkList will be your answer.