Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有办法比较C语言中的两个列表#_C#_List - Fatal编程技术网

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