[英]Compare two List<> on C#
我的问题是这样的: C#列表比较
但唯一要注意的是:
我正在使用.NET Framework 2.0
因此,如何在C#框架2上比较两个列表,并在项目不同的情况下返回布尔值?
instance == anotherone fails
instance.Equals(anotherone) fails.
编辑:
他们都是列表
编辑2
我正在尝试比较列表值是否正确。 我可以对它们进行排序,为此。 问题是项目的计数或值是否更改。 例如:
List1->Item1 = "A"
List1->Item2 = "B"
List2->Item1 = "B"
List2->Item2 = "A"
//must return true
List1->Item1 = "A"
List1->Item2 = "B"
List2->Item1 = "B"
List2->Item2 = "C"
//must return false
List1->Item1 = "A"
List1->Item2 = "B"
List2->Item1 = "B"
List2->Item2 = "A"
List2->Item3 = "A"
//must return false, etc.
谢谢和亲切的问候。
对于在计算交叉路口时要链接到的问题,您需要实现自己的Intersect
版本。 这应该使您开始:
List<T> Intersect<T>(List<T> first, List<T> second) {
Dictionary<T, T> potential = new Dictionary<T, T>();
foreach (var item in first) {
potential.Add(item, item);
}
List<T> intersection = new List<T>();
foreach (var item in second) {
if (potential.Remove(item)) {
intersection.Add(item);
}
}
return intersection;
}
要处理它们是否具有相同频率的相同项目:
bool AreSameAsMultiSets(List<T> first, List<T> second) {
Dictionary<T, int> counts = new Dictionary<T, int>();
foreach (var item in first) {
if (!counts.ContainsKey(item)) {
counts.Add(item, 0);
}
counts[item] = counts[item] + 1;
}
foreach (var item in second) {
if (!counts.ContainsKey(item)) {
return false;
}
counts[item] = counts[item] - 1;
}
foreach (var entry in counts) {
if (entry.Value != 0) {
return false;
}
}
return true;
}
您可能应该在上面添加一些错误处理(第一个不为null,第二个不为null)。 请注意,由于您位于.NET 2.0中,因此无法使用HashSet<T>
。
如果要检查列表中是否包含相同的项目(即,相同的项目以相同的顺序):
public static bool ListsEqual<T>(List<T> list1, List<T> list2) {
if (list1.Count != list2.Count) return false;
for (int i = 0; i < list1.Count; i++) {
if (list1[i] != list2[i]) return false;
}
return true;
}
莱安德罗
您也可以使用我的开源比较.NET对象库。 您可以将Config.IgnoreCollectionOrder设置为true。
https://comparenetobjects.codeplex.com/
[Test]
public void ComparerIgnoreOrderSimpleArraysTest()
{
var a = new String[] { "A", "E", "F" };
var b = new String[] { "A", "c", "d", "F" };
var comparer = new CompareLogic();
comparer.Config.IgnoreCollectionOrder = true;
comparer.Config.MaxDifferences = int.MaxValue;
ComparisonResult result = comparer.Compare(a, b);
Console.WriteLine(result.DifferencesString);
Assert.IsTrue(result.Differences.Where(d => d.Object1Value == "E").Count() == 1);
Assert.IsTrue(result.Differences.Where(d => d.Object2Value == "c").Count() == 1);
Assert.IsTrue(result.Differences.Where(d => d.Object2Value == "d").Count() == 1);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.