【问题标题】:Distinct IList and select second element不同的 IList 并选择第二个元素
【发布时间】:2015-01-26 13:00:23
【问题描述】:

我有一个 IList 集合

public IList<MyObject> Items

我可以对该列表进行分组并获取每个组的第一个元素

Items.GroupBy(x => x.Type).Select(grp => grp.First()).ToList();

如何对该列表进行分组而不是第一个元素(例如:第二个)??

【问题讨论】:

    标签: c# list linq distinct linq-group


    【解决方案1】:

    你可以使用Enumerable.ElementAt:

    var everySecond = Items.GroupBy(x => x.Type).Select(grp => grp.ElementAt(1)).ToList();
    

    如果没有太多项目,您可以使用 ElementAtOrDefault 代替返回 null(对于引用类型)。

    编辑:“我已选择项目并希望将其显示在组中作为主要元素”:

    所以实际上你想得到第一个匹配特定条件的,在这种情况下它是被选中的,你可以订购组并取第一个:

    var everySelected = Items
        .GroupBy(x => x.Type)
        .Select(grp => grp.OrderByDescending(x => x == selectedItem).First())
        .ToList();
    

    我使用了OrderByDescending(认为真为1,假为0)进行比较。这样,与您选择的项目具有相同引用的每个项目都会首先出现(将其替换为您想要比较它们的逻辑而不是引用相等)。

    【讨论】:

    • 但我不知道那个元素的索引。我可以按元素选择吗?
    • @ArmenMkrtchyan:但你提到你想取“例如:第二个”。 “按元素选择”是什么意思?
    • 我已经选择了项目并希望在组中显示它作为主要元素
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    相关资源
    最近更新 更多