2

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

例如,如果我有一个带有字段和订单的表格,例如:

Field -- Order

F1 -- 1

F2 -- 2

F3 -- 3

F4 -- 4

另一个:

Field -- Order

F1 -- 3

F2 -- 2

F3 -- 1

F4 -- 4

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

我想到的一种方法是比较 Order Field 的前一个值和下一个值,因此如果它们都不同,那么顺序就会发生变化。我还必须考虑任何增加或删除的价值。

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

说第二张桌子现在看起来像:

Field -- Order

F1 -- 1

F3 -- 3

F4 -- 4

因为某些东西已被删除。订单值没有改变,但 F3 现在将在 F1 之后。F4 也一样。

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

4

2 回答 2

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 表示不同的项目:如果结果为 true、false、false、true,则表示两个列表之间的第一个和第四个元素是不同的。

var some = list1.Zip(list2, (a, b) => a.SomeProperty != b.SomeProperty);
于 2013-06-20T13:25:00.797 回答
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.

编辑2:这个呢?

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.
于 2013-06-20T13:13:43.000 回答