首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

请教,怎么比较这两个集合是否相等

2012-07-26 
请问,如何比较这两个集合是否相等Liststring list1 new Liststring() { 0, 1 }Liststring li

请问,如何比较这两个集合是否相等
List<string> list1 = new List<string>() { "0", "1" };
List<string> list2 = new List<string>() { "1", "0" };


如何比较上面两个集合list1、list2,它们是否相等
给出的条件是:只要其元素的个数、内容相等,就算相等,而不管元素的排序、索引值是否相等。
比如 { "0", "1" }与{ "1", "0" }算是相等的,{ "4", "5" }与{ "5", "4" } 也是相等的

如何比较?

[解决办法]
最简单的:先看数量,数量相等再把它们排序,依次比较。
[解决办法]
http://topic.csdn.net/u/20120629/15/64a57b64-90a6-4206-9523-bc746193c1c1.html
[解决办法]

C# code
public static bool isEqual(List<string> list1, List<string> list2)        {            list1.Sort();            list2.Sort();            if (list1.Count == list2.Count)            {                int i = 0;                foreach (string str in list1)                {                    if (str != list2[i])                    {                        return false;                    }                    i++;                }                return true;            }            return false;        }
[解决办法]
C# code
if (list1.Count == list2.Count && list1.Except(list2).Count() == 0 && list2.Except(list1).Count() == 0){  //集合相等}//或者if (list1.Count == list2.Count && list1.All(x => list2.Contains(x)) && list2.All(x => list1.Contains(x))){  //集合相等}
[解决办法]
方法真的很多,比如
list1.Count == list2.Count && list1.OrderBy(x => x).Zip(list2.OrderBy(x => x), (x, y) => x == y).All(x => x == true);
[解决办法]
需要先排序,否则如果集合中有重复的元素很多方法就不灵了。三楼稳妥,五楼也对。
[解决办法]
C# code
    protected void Page_Load(object sender, EventArgs e)    {        List<string> listA = new List<string>() { "0", "1" };        List<string> listB = new List<string>() { "1", "0" };        int count = listA.Except(listB).ToList().Count;//这一句就够了        if (count == 0)        {            Response.Write("相等"); return;        }        Response.Write("不相等");    }
[解决办法]
探讨

C# code

protected void Page_Load(object sender, EventArgs e)
{
List<string> listA = new List<string>() { "0", "1" };
List<string> listB = new List<string>() { "1", "0" };
……

[解决办法]
先看数量,数量相等再把它们排序,依次比较。
[解决办法]
探讨
引用:

C# code

protected void Page_Load(object sender, EventArgs e)
{
List<string> listA = new List<string>() { "0", "1" };
List<string> listB = new List<string>() { "1", "0" };
……

如……

[解决办法]
先判断元素个数相不相等?不相等则直接return false,若相等,则继续判断,先排序(最好是自己规定比较格式),然后就好比较了
------解决方案--------------------


为什么不先判断是不是为null呢

[解决办法]
然后,是不是应该再判断长度是否为0呢

[解决办法]
{ 1, 1, 2, 2, 3 }
{ 1, 2, 2, 3, 3 }
[解决办法]

探讨

{ 1, 1, 2, 2, 3 }
{ 1, 2, 2, 3, 3 }

[解决办法]
探讨
引用:

{ 1, 1, 2, 2, 3 }
{ 1, 2, 2, 3, 3 }


谢谢。取差集确实欠考虑了。还是排序比较稳妥。

C# code
list1.Count == list2.Count &amp;&amp; list1.OrderBy(x => x).SequenceEqual(list2.OrderBy(x => x))

[解决办法]
不用排序, 先判断长度,相等则遍历其中一个集合,元素在另一个集合中没有则直接返回false

有则在另外的集合中移除该元素 并继续遍历。 复杂度比O(n)略高

热点排行