如何比较两个ArrayList的值是否相等?

lbsxyk 2005-12-13 02:55:12
ArrayList ListA = new ArrayList();
ArrayList ListB = new ArrayList();
string str = "aaa";

ListA.Add(str);
ListB.Add(str);

if (ListA.Equals(ListB))
return true;
else
return false;

为什么两个的返回false。
如何比较两个ArrayList的值是否相等?
...全文
1703 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
huwei001982 2005-12-14
  • 打赏
  • 举报
回复
to zihu928(笨狐狸)
用 generics 的是懒人,不是高手
--------------------------------
原来泛型在你的眼中不值一提, 呵
xczgb 2005-12-13
  • 打赏
  • 举报
回复
我知道了。。我靠。。
xczgb 2005-12-13
  • 打赏
  • 举报
回复
问问高手。。EqualAll<T>是什么???

顺便学习下。。先谢了
Ivony 2005-12-13
  • 打赏
  • 举报
回复
不好意思,刚才没看清挑刺的程序。
另外,在挑刺的算法里面,泛型似乎是多余的……但思路是对的……。
Ivony 2005-12-13
  • 打赏
  • 举报
回复
这种问题正是泛型的用武之地啊,

挑刺的算法可以改进一下,如果T实现了ICompare接口,就让他自己比较:
ICompare comparable = e1.Current as ICompare;
if ( comparable != null )
....
Lcindep110 2005-12-13
  • 打赏
  • 举报
回复
学习!!!!!
xvting 2005-12-13
  • 打赏
  • 举报
回复
如果arraylist里是string等简单数据类型用一次顺环比较就ok

如果是对象,对象里还有对象,那就要每个对象都加个比较方法equal(),上层对象equal()调用下层对象equal(),层层调用!

类似的还有对象复制!

汗!谁知道简单点的方法!
c11_11_11 2005-12-13
  • 打赏
  • 举报
回复
循环比较
tiaoci 2005-12-13
  • 打赏
  • 举报
回复
to zihu928(笨狐狸)

用 generics 的是懒人,不是高手
zhiang75 2005-12-13
  • 打赏
  • 举报
回复
读出来比较还要考虑位置的问题
ArrayList ListA = new ArrayList();
ArrayList ListB = new ArrayList();
string str1 = "1";
string str2 = "2";

ListA.Add(str1);
ListB.Add(str2);
ListA.Add(str2);
ListB.Add(str1);

这样的列表 ListA 和ListB 相等吗? 要是相等,比较就更麻烦了.:)
zihu928 2005-12-13
  • 打赏
  • 举报
回复
to:tiaoci(我挑刺,我快乐)

是用到generic吗?看来是高手呀!

恩,学习!!!
oyljerry 2005-12-13
  • 打赏
  • 举报
回复
一个个读了比较吧
swordragon 2005-12-13
  • 打赏
  • 举报
回复
真的得一个一个读出来进行比较?
++++++++++++++++++++

没错,只能一个一个地去比较。
jackymi 2005-12-13
  • 打赏
  • 举报
回复
如果不在乎元素的内容是否相等的话,直接比较count,否则只有逐个比较
tiaoci 2005-12-13
  • 打赏
  • 举报
回复
比较通用的算法这么写

public static bool EqualAll<T>(IEnumerable<T> first, IEnumerable<T> second)
{
using(IEnumerator<T> e1 = first.GetEnumerator())
{
using(IEnumerator<T> e2 = second.GetEnumerator())
{
while(e1.MoveNext())
{
if(!(e2.MoveNext() && object.Equals(e1.Current, e2.Current))) return false;
}
if(e2.MoveNext()) return false;
}
}
return true;
}
jijl2001 2005-12-13
  • 打赏
  • 举报
回复
那你就一个一个比了
lbsxyk 2005-12-13
  • 打赏
  • 举报
回复
To: jackymi(完美刺客)
我也知道这样相等了,但我想知道如何实现两个List值比较的方法,真的得一个一个读出来进行比较?
jackymi 2005-12-13
  • 打赏
  • 举报
回复
ArrayList ListA = new ArrayList();
ArrayList ListB = ListA;
string str = "aaa";

ListA.Add(str);
ListB.Add(str);

if (ListA.Equals(ListB))
return true;
else
return false;

这样就相等啦
lbsxyk 2005-12-13
  • 打赏
  • 举报
回复
实际上我就是为了给我的类重写一个Equals方法,我是这样的写的

public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType()) return false;
return ((Party)obj).PartyName.Equals(partyName)
&& ((Party)obj).parents.Equals(parents)
&& ((Party)obj).children.Equals(children);
}

public override int GetHashCode()
{
return partyName.GetHashCode() ^ children.GetHashCode() ^ parents.GetHashCode();
}

其中parents和children是ArrayList类型,所以这样就会出错!
antoniusguo 2005-12-13
  • 打赏
  • 举报
回复
要实现上面的功能除非自己重写Equals函数,再重写GetHashCode函数
加载更多回复(1)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧