zoukankan      html  css  js  c++  java
  • C# Linq 取得两个列表的交集

     我们经常会用到linq 来查询 一个数组中和另一个数组中相同的项, 这个时候就会用到IEqualityComparer接口。

    public class StudyInfoModel
    {
         public string InstanceUID = "";
    }

    public class StudyCompare : IEqualityComparer<StudyInfoModel>
                    {
            // StudyInfoModel are equal if their UID equal.
            public bool Equals(StudyInfoModel x, StudyInfoModel y)
            {
                //Check whether the compared objects reference the same data.
                if (Object.ReferenceEquals(x, y)) return true;

                //Check whether any of the compared objects is null.
                if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
                    return false;

                //Check whether the Study' properties are equal.
                return x.InstanceUID == y.InstanceUID;
            }

            // If Equals() returns true for a pair of objects
            // then GetHashCode() must return the same value for these objects.
            public int GetHashCode(StudyInfoModel study)
            {
                //Check whether the object is null
                if (Object.ReferenceEquals(study, null)) return 0;

                //Get hash code for the Name field if it is not null.
                int hashStudyName = study.InstanceUID == null ? 0 : study.InstanceUID.GetHashCode();

                return hashStudyName;
            }


                    }


    以上实现了关于StudyInfoModel的IEqualityCompare接口, 其中条件为InstanceUID相同。

    具体使用:

    List<StudyInfoModel> StudyData = new List<StudyInfoModel>();
    List<StudyInfoModel> StudyList = new List<StudyInfoModel>();

    .......

    //取得StudyData数组中InstanceUID在StudyLIst存在的所有项
    var needModifyStudy = StudyData.Intersect(StudyList, new StudyCompare()).ToList();

    比如StudyData中是InstanceUID分别为1,2,3,4,5,6的数据, StudyList中是InstanceUID分别为2,4,6,8,10的数据, 
    则查询结果为StudyData中2,4,6的项。


    https://muzizongheng.blog.csdn.net/
  • 相关阅读:
    executable binary cannot run on android marshmallow (android 6.0)
    Android std and stl support
    Android std and stl support
    (OK) static linked & dynamically linked
    (OK)(OK) cross compile quagga-0.99.21mr2.2 for android-x86 in Fedora23
    linux和STL 常用头文件及说明
    Firefox 新增容器标签:可同时登录多个用户
    Android —— API Level
    Android added new permission model for Android 6.0 (Marshmallow).
    (OK) Android adb连接VirtualBox方式
  • 原文地址:https://www.cnblogs.com/muzizongheng/p/3167260.html
Copyright © 2011-2022 走看看