比较两个顺序发生变化的列表

本文关键字:顺序发生 变化 列表 两个 比较 | 更新日期: 2023-09-27 18:19:16

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

例如,如果我有一个带有字段和命令的表:

Field -- Order
F1 -- 1
F2 -- 2
F3 -- 3
F4 -- 4

和另一个问题:

Field -- Order
F1 -- 3
F2 -- 2
F3 -- 1
F4 -- 4

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

我想到的一种方法是比较订单字段的前一个和下一个值,所以如果它们都不同,那么顺序就发生了变化。我还必须考虑到任何增加或减少的价值。

埃塔:我想澄清一下我所说的考虑可能的添加或删除是什么意思。

假设第二个表现在看起来像:

Field -- Order
F1 -- 1
F3 -- 3
F4 -- 4

因为有东西被删除了。顺序值没有改变,但F3现在在F1之后。

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

比较两个顺序发生变化的列表

这将检查两个列表是否相等

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);

this next将返回一个布尔值的可再生值,其中true表示不同的项,例如:如果result为true,false,false,true,则表示两个列表中的第一个和第四个元素不同。

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

我感觉这是一个家庭作业问题: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.