C# 有没有办法比较C语言中的两个列表#
我通过以下方式比较两个列表:C# 有没有办法比较C语言中的两个列表#,c#,list,C#,List,我通过以下方式比较两个列表: var listOne = new List<int>{1,2,3,4,5}; var listTwo = new List<int>{1,2,3,4,5,7}; bool isEqual = false; foreach (var item in listOne) { if(listTwo.Contains(item)) { isEqual = true; } else {
var listOne = new List<int>{1,2,3,4,5};
var listTwo = new List<int>{1,2,3,4,5,7};
bool isEqual = false;
foreach (var item in listOne)
{
if(listTwo.Contains(item))
{
isEqual = true;
}
else
{
isEqual = false;
break;
}
}
if(listOne.Count == listTwo.Count && isEqual == true)
{
Console.WriteLine("Equal list");
}
else
{
Console.WriteLine("Not Equal list");
}
var listOne=新列表{1,2,3,4,5};
var listwo=新列表{1,2,3,4,5,7};
bool-isEqual=假;
foreach(listOne中的var项)
{
if(列表2.Contains(项目))
{
等质量=真;
}
其他的
{
isEqual=假;
打破
}
}
if(listOne.Count==listwo.Count&&isEqual==true)
{
控制台写入线(“相等列表”);
}
其他的
{
控制台写入线(“不相等列表”);
}
有什么简单的方法可以做到这一点吗?非常简单的方法
var listOne = new List<int>{1,2,3,4,5};
var listTwo = new List<int>{1,2,3,4,5,7};
if (listOne.SequenceEqual(listTwo))
{
Console.WriteLine("Equal list");
}
else
{
Console.WriteLine("Not Equal list");
}
var listOne=新列表{1,2,3,4,5};
var listwo=新列表{1,2,3,4,5,7};
if(listOne.SequenceEqual(listwo))
{
控制台写入线(“相等列表”);
}
其他的
{
控制台写入线(“不相等列表”);
}
如果顺序无关紧要,那么解决方案将是
var listOne = new List<int>{1,2,3,4,5};
var listTwo = new List<int>{1,2,3,4,5,7};
if (listOne.OrderBy(m => m).SequenceEqual(listTwo.OrderBy(m => m)))
{
Console.WriteLine("Equal list");
}
else
{
Console.WriteLine("Not Equal list");
}
var listOne=新列表{1,2,3,4,5};
var listwo=新列表{1,2,3,4,5,7};
if(listOne.OrderBy(m=>m).SequenceEqual(listwo.OrderBy(m=>m)))
{
控制台写入线(“相等列表”);
}
其他的
{
控制台写入线(“不相等列表”);
}
如果您对相同的订单不感兴趣,您可以使用,但
非常有效:
bool isEqual = !listOne.Except(listTwo).Any();
如果您想知道两者是否包含相同的项目(仍然忽略订单):
如果要检查两个列表是否以相同的顺序包含相同的项目:
bool isEqual = listOne.SequenceEqual(listTwo);
如果您使用的是自定义类型,则需要重写
Equals
和GetHashCode
,否则您只需通过引用进行比较。我认为最简单的方法是使用方法
通过比较元素确定两个序列是否相等
通过对其类型使用默认的相等比较器
SequenceEqual(IEnumerable,IEnumerable)
方法并行枚举两个源序列,并使用TSource
的默认相等比较器比较相应的元素。默认相等比较器default
,用于比较实现通用接口的类型的值
作为Tim,若您的项目并没有被订购,那个么使用这个方法看起来会更好。比如,
bool equal = !listTwo.Except(listOne).Any();
假设您对订单不感兴趣,可以使用
OrderBy
和SequenceEqual
:
public static bool ListsEquals(List<int> listOne, List<int> listTwo)
{
if (listOne.Count != listTwo.Count)
return false;
if (!listOne.OrderBy(x => x).SequenceEqual(listTwo.OrderBy(x => x)))
return false;
}
或除
和任何
public static bool ListsEquals(List<int> listOne, List<int> listTwo)
{
if (listOne.Count != listTwo.Count)
return false;
if (!listOne.Except(listTwo).Any())
return false;
return true;
}
public static bool ListsEquals(列表一、列表二)
{
if(listOne.Count!=listwo.Count)
返回false;
如果(!listOne.Except(listwo.Any())
返回false;
返回true;
}
如果列表中项目的顺序很重要,您可以按照此处的建议使用SequenceEqual
如果顺序不重要,您应该在排序之前对列表进行排序,我会在排序之前检查列表的计数,以避免排序和比较不同大小的列表:
var listOne = new List<int>{1,2,3,4,5};
var listTwo = new List<int>{1,2,3,4,5,7};
var equal = (listOne.Count == listTwo.Count);
if (equal)
{
listOne.Sort();
listTwo.Sort();
equal = listOne.SequenceEqual(listTwo)
}
if (equal)
{
Console.WriteLine("Equal list");
}
else
{
Console.WriteLine("Not Equal list");
}
var listOne=新列表{1,2,3,4,5};
var listwo=新列表{1,2,3,4,5,7};
var equal=(listOne.Count==listwo.Count);
如果(相等)
{
listOne.Sort();
list2.Sort();
equal=listOne.SequenceEqual(listTwo)
}
如果(相等)
{
控制台写入线(“相等列表”);
}
其他的
{
控制台写入线(“不相等列表”);
}
if(listOne.Except(listwo.Any()):)您关心项目的顺序吗?比如,{1,2}={2,1}对你来说重要吗?{1,2}={2,1}不重要@RoeeGavirel@IITDU:但您接受的答案不会忽略顺序。所以这和你的代码不同。实际上我不确定顺序是否重要。无论如何。。我编辑了它。他没有提到他想知道两者是否有相同的项目顺序。这是不正确的{1,2}
和{2,1}
应该返回true
@AhmedKRAIEM-OP没有直接指定,但他的代码会建议,是的。@Corak:实际上,OP在对他的问题的评论中已经直接指定了。实际上,我不确定顺序是否重要。无论如何。。我编辑了它。但他不想知道项目的顺序是否也一样,至少他的旧代码没有检查。@TimSchmelter谢谢Tim,更新了。
public static bool ListsEquals(List<int> listOne, List<int> listTwo)
{
if (listOne.Count != listTwo.Count)
return false;
if (listOne.Intersect(listTwo).Count() != listOne.Count)
return false;
return true;
}
public static bool ListsEquals(List<int> listOne, List<int> listTwo)
{
if (listOne.Count != listTwo.Count)
return false;
if (!listOne.Except(listTwo).Any())
return false;
return true;
}
var listOne = new List<int>{1,2,3,4,5};
var listTwo = new List<int>{1,2,3,4,5,7};
var equal = (listOne.Count == listTwo.Count);
if (equal)
{
listOne.Sort();
listTwo.Sort();
equal = listOne.SequenceEqual(listTwo)
}
if (equal)
{
Console.WriteLine("Equal list");
}
else
{
Console.WriteLine("Not Equal list");
}