zoukankan      html  css  js  c++  java
  • 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;
    }

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

    如有不足,请补充。

  • 相关阅读:
    MongoDB 3.0 添加用户
    MongoDB基本命令用
    http://www.bootcss.com/
    UML之用例图
    .net 下分布式缓存(Memcached)实现
    Android系列 -- 2、视图组件View
    Android系列 -- 1、 初识android
    TP50、TP90、TP99、TP999详解
    Linux下SSD缓存加速之bcache使用
    数据中心常见电源线详细介绍
  • 原文地址:https://www.cnblogs.com/icyJ/p/IEnumerable_Except.html
Copyright © 2011-2022 走看看