-1

IList コレクションがあります

public IList<MyObject> Items

そのリストをグループ化し、各グループの最初の要素を取得できます

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

そのリストをグループ化して、最初の要素 (例: 2 番目) を取得するにはどうすればよいですか??

4

1 に答える 1

0

使用できますEnumerable.ElementAt

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

使用できる項目がそれほど多くない場合は、ElementAtOrDefault代わりに null を返します (参照型の場合)。

編集:「私はselectedItemを持っていて、それをメイン要素としてグループに表示したい」:

したがって、実際には、特定の条件に一致する最初のものを取得する必要があります。この場合は選択されたものであり、グループを注文して最初のものを取得できます。

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

私はOrderByDescending比較で使用しました(trueが1でfalseが0であると考えてください)。このようにして、選択したアイテムと同じ参照であるすべてのアイテムが最初に来ます(参照の等価性ではなく、それらを比較する方法のロジックに置き換えてください)。

于 2015-01-26T13:01:39.627 に答える