选择不同的 IList,然后选择第二个元素



我有一个 IList 集合

public IList<MyObject> Items

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

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

我怎样才能对该列表进行分组并且不采用第一个元素(例如:第二个)?

您可以使用Enumerable.ElementAt

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

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

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

所以实际上你想得到第一个符合特定条件的,在这种情况下它是被选中的,你可以对组进行排序并拿第一个:

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

我在比较中使用了OrderByDescending(考虑到 true 是 1,false 是 0)。这样,与所选项目具有相同引用的每个项目都排在第一位(将其替换为您希望如何比较它们的逻辑而不是引用相等性)。

相关内容

  • 没有找到相关文章

最新更新