我希望能够比较两个列表,看看这些值的顺序是否相同。
例如,如果我有一个包含字段的表和一个如下的订单:
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已经改变。
答案 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.