zoukankan      html  css  js  c++  java
  • 求两个集合的交集,并集,差集

    1.  取交集 (A和B都有)

    List A : { 1 , 2 , 3 , 5 , 9 }

    List B : { 4 , 3 , 9 }

    var intersectedList = list1.Intersect(list2);

    結果 : { 3 , 9 }

    判斷A和B是否有交集

    bool isIntersected = list1.Intersect(list2).Count() > 0

    2. 取差集 (A有,B沒有)

    List A : { 1 , 2 , 3 , 5 , 9 }

    List B : { 4 , 3 , 9 }

    var expectedList = list1.Except(list2);

    結果 : { 1 , 2 , 5 }

    判斷A和B是否有差集
    bool isExpected = list1.Expect(list2).Count() > 0

    3.  取聯集 (包含A和B)

    List A : { 1 , 2 , 3 , 5 , 9 }

    List B : { 4 , 3 , 9 }

        public static class ListExtensions
        {
            public static List<T> Merge<T>(this List<T> source, List<T> target)
            {
                List<T> mergedList = new List<T>(source);
                mergedList.AddRange(target.Except(source));
                return mergedList;
            }
        }

    var mergedList = list1.Merge(list2);

    結果 : { 1 , 2 , 3 , 5 ,9 , 4 }

    举例2个集合A,B. 

     List<int> listA = new List<int> {1,2,3,5,7,9};

     List<int> listB = new List<int> {13,4,17,29,2}; 
     listA.AddRange(listB );把集合A.B合并
     List<int> Result = listA.Union(listB).ToList<int>();          //剔除重复项 
     List<int> Result = listA.Concat(listB).ToList<int>();        //保留重复项

     listA.BinarySearch("1");//判断集合中是否包含某个值.如果包含则返回0

    举例两个数组

     int[] i=new int[]{1,2};
      int[] j=new int[]{2,3};
      List<int> r = new List<int>();  

      r.AddRange(i);

      r.AddRange(j);

      int[] c = r.ToArray(); 合并数组

      int[] x=i.Union(j).ToArray<int>(); //剔除重复项 

      int[] x=i.Concat(j).ToArray<int>(); //保留重复项

      int n = Array.BinarySearch(i,3);//判断数组中是否包含某个值.如果包含则返回0

    一个集合中去除另一个集合

                                    List<string> listold = itemtocheck.AuidtSearchWord.Split(',').ToList(); //旧的搜索词
                                    List<string> listnew = NewsearchWords.Split(',').ToList(); //新的搜索词
                                    listold.RemoveAll(c => listnew.Contains(c));
                                    tempmixwords = string.Join(",", listold.Distinct());

    IEqualityComparer接口实现

    private static IEnumerable<TSource> ExceptIterator<TSource>(IEnumerable<TSource> first, IEnumerable<TSource> second, IEqualityComparer<TSource> comparer)
    {
      Set<TSource> set = new Set<TSource>(comparer);
      foreach (TSource source in second)
        set.Add(source);
      foreach (TSource source in first)
      {
        if (set.Add(source))
          yield return source;
      }
    }
    
    public interface IEqualityComparer<in T>
    {
      /// <summary>确定指定的对象是否相等。</summary>
      /// <returns>如果指定的对象相等,则为 true;否则为 false。</returns>
      /// <param name="x">要比较的第一个类型为 <paramref name="T" /> 的对象。</param>
      /// <param name="y">要比较的第二个类型为 <paramref name="T" /> 的对象。</param>
      [__DynamicallyInvokable]
      bool Equals(T x, T y);
     
      /// <summary>返回指定对象的哈希代码。</summary>
      /// <returns>指定对象的哈希代码。</returns>
      /// <param name="obj">
      /// <see cref="T:System.Object" />,将为其返回哈希代码。</param>
      /// <exception cref="T:System.ArgumentNullException">
      /// <paramref name="obj" /> 的类型为引用类型,<paramref name="obj" /> 为 null。</exception>
      [__DynamicallyInvokable]
      int GetHashCode(T obj);
    }
    public class DeliverySchedulerComparer : IEqualityComparer<DeliverySchedulerDO>
    {
        private static readonly DeliverySchedulerComparer _comparer = new DeliverySchedulerComparer();
     
        public static DeliverySchedulerComparer Instance()
        {
            return _comparer;
        }
     
        public bool Equals(DeliverySchedulerDO x, DeliverySchedulerDO y)
        {
            return x.DeliveryLineId == y.DeliveryLineId &&
                   x.DeliveryManId == y.DeliveryManId;
        }
     
        public int GetHashCode(DeliverySchedulerDO obj)
        {
            string code = obj.DeliveryLineId.ToString() + obj.DeliveryManId.ToString();
     
            return code.GetHashCode();
        }
    
    //var invalidSchedulers = existsSchedulers.Except(dmsSchedulers, DeliverySchedulerComparer.Instance()).ToList();

    zip操作符

    int[] numbers = { 3, 5, 7 };
    string[] words = { "three", "five", "seven", "ignored" };
    IEnumerable<string> zip = numbers.Zip (words, (n, w) => n + "=" + w);
     
    // 产生的sequence包含如下元素
    // 3=three
    // 5=five
    // 7=seven

     参考:http://www.cnblogs.com/lifepoem/archive/2011/11/29/2267243.html

    EqualityHelper

    using System;
    using System.Collections.Generic;
    
    namespace Common
    {
        public static class EqualityHelper<T>
        {
            public static IEqualityComparer<T> CreateComparer<V>(Func<T, V> keySelector)
            {
                return new CommonEqualityComparer<V>(keySelector);
            }
            public static IEqualityComparer<T> CreateComparer<V>(Func<T, V> keySelector, IEqualityComparer<V> comparer)
            {
                return new CommonEqualityComparer<V>(keySelector, comparer);
            }
    
            class CommonEqualityComparer<V> : IEqualityComparer<T>
            {
                private Func<T, V> keySelector;
                private IEqualityComparer<V> comparer;
    
                public CommonEqualityComparer(Func<T, V> keySelector, IEqualityComparer<V> comparer)
                {
                    this.keySelector = keySelector;
                    this.comparer = comparer;
                }
                public CommonEqualityComparer(Func<T, V> keySelector)
                    : this(keySelector, EqualityComparer<V>.Default)
                { }
    
                public bool Equals(T x, T y)
                {
                    return comparer.Equals(keySelector(x), keySelector(y));
                }
                public int GetHashCode(T obj)
                {
                    return comparer.GetHashCode(keySelector(obj));
                }
            }
        }
    }
     var comparer = EqualityHelper<TestPropertyEntity>.CreateComparer(x => new { x.PropertyCode,x.PropertyType });
    
    //求差集
                    var needExcuteDifferList = allPropertyList.Except(existedPropertyList, comparer).ToList();
    
    //去重
    result = result.Distinct(comparer).ToList();
  • 相关阅读:
    return, break, continue
    equals 与 ==
    过滤器
    通过域名区分虚拟主机
    通过端口区分不同虚拟机
    Nginx实现反向代理
    Nginx安装
    poj2387 Til the Cows Come Home(Dijkstra)
    hdoj2544 最短路(Dijkstra || Floyd || SPFA)
    最小生成树
  • 原文地址:https://www.cnblogs.com/shy1766IT/p/5321358.html
Copyright © 2011-2022 走看看