比较两个顺序发生变化的列表
本文关键字:顺序发生 变化 列表 两个 比较 | 更新日期: 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.