如何基于属性获取两个类的交集 - c#

我有这个课

public class FlightSegment{
     public string ClassName { get;set;}
}

我想获得与普通FlightSegments相同的ClassName

void Main()
{
    var list1 = new List<FlightSegment>() { 
        new FlightSegment{ ClassName = "A"},
        new FlightSegment { ClassName = "B"}
    };      
    var list2 = new List<FlightSegment>() { 
        new FlightSegment{ ClassName = "B"},
        new FlightSegment { ClassName = "C"}
    }; 

    var listOfLists = new List<List<FlightSegment>>() { list1, list2 };     
    var intersection = listOfLists.Aggregate((previousList, nextList) => previousList.Intersect(nextList).ToList());        
    Console.WriteLine(intersection); //Gives me empty result

}

我尝试过这样的事情:

    var intersection = listOfLists.Aggregate((previousList, nextList) =>   
      previousList.Select(e=>e.ClassName).Intersect(nextList.Select(e=>e.ClassName)).ToList());

但给出错误:

Cannot convert expression type System.Collection.Generic.List<string> to return type System.Collection.Generic.List<FlightSegment>

参考方案

您可以使用Intersect方法传递IEqualityComparer以根据ClassName属性进行比较:

class FlightComparer : EqualityComparer<FlightSegment>
{
    public override bool Equals(FlightSegment x, FlightSegment y)
    {
        return x.ClassName == y.ClassName;
    }

    public override int GetHashCode(FlightSegment obj)
    {
        return obj.ClassName.GetHashCode();
    }
}

然后,使用此比较器进行交点:

var list1 = new List<FlightSegment>() { 
    new FlightSegment{ ClassName = "A"},
    new FlightSegment { ClassName = "B"}
};      
var list2 = new List<FlightSegment>() { 
    new FlightSegment{ ClassName = "B"},
    new FlightSegment { ClassName = "C"}
}; 
var result = list1.Intersect(list2, new FlightComparer());

这将返回仅包含一个元素FlightSegment { ClassName = "B" }的集合。

使用这个想法和Aggregate,您可以基于属性获得一组列表的交集:

var intersection = listOfLists.Aggregate((previousList, nextList) => previousList.Intersect(nextList, new FlightComparer() ).ToList()); 

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

改造正在返回一个空的响应主体 - java

我正在尝试使用Retrofit和Gson解析一些JSON。但是,我得到的响应机构是空的。当我尝试从对象中打印信息时,出现NullPointerException。我确保URL正确,并且我也确保POJO也正确。我正在使用jsonschema2pojo来帮助创建POJO类。这是我要解析的JSON{ "?xml": { "@versi…

Mongo汇总 - javascript

我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …

如何在Wiremock中为JUNIT匹配精确的json - java

我正在使用Wiremock在Spring启动应用程序中模拟Junit的REST服务。我的问题是,我无法匹配多个匹配模式。 Junit.javaStringValuePattern pattern = WireMock.matching(".*"); givenThat(post(urlEqualTo("/softwares�…

Ajax表单未获得结果 - javascript

我有一个带有搜索功能的主页。从主页搜索可以正常工作,但是当我尝试使用ajax表单(在url.com/search?id=biology上)再次搜索时,我被重定向到404页面,提示未找到/Search。主页上的表格:@using (Html.BeginForm("Index", "Search", new { Retur…