c# 不论顺序,求两个集合的值是否一样

.net环境在3.5以上才有IEnumerable<T>.Except的方法。

主要的思路是用求差集来处理。

求差集Except方法不能完全处理我想要的这种需求。

例如:

List<int> aa = new List<int>() { 0, 1, 2, 3, 4, 5 };
List<int> bb = new List<int>() { 6, 5, 4, 3, 2, 1, 0 };
List<int> cc = new List<int>() { 7, 8, 9, 10, 0 };
var x = aa.Except(bb).ToList();
var y = bb.Except(aa).ToList();
var z = aa.Except(cc).ToList();

//可以看到x为空集合,Count为0;而y的集合里面只有一个元素6;z集合里面有1, 2, 3, 4, 5五个元素。

这里的aa和bb,cc明显不一样,不难推出Except的后台运算逻辑是有一个原始集合,和一个类比集合的概念。在原始集合的基础上,计算类比集合和原始集合的共有元素,然后Except运算在原始集合的基础上减去这些共有元素,得到剩余元素。

原理上大概是这样。

要实现本文最原始的诉求,我们可以在Except的基础上增加一个数量的比较

public static bool ListEquals<T>(this IEnumerable<T> one, IEnumerable<T> another)
{
    if (one.Count() != another.Count()) return false;
    return (one.Except(another)).Count() == 0;
}

这是我拿来用的扩展方法。

如有不足,请补充。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值