求两个集合的交集,并集,差集

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值