Linq

C# Linq Groupby後に2番目に大きい(小さい)レコードを取得する方法

今回のテーマ

今回はLinqのGroupbyをした後に各グループから2番目に大きい(小さい)レコードを

取り出す方法を解説していきます。

意外と2番目や3番目の要素を取り出したい場面って多いですよね。

その度に検索しますが、意外と見つからないんですよね。

この記事では、Groupby後の各グループから2番目に大きいレコードを取り出すことを目標とします。

早速やっていきましょう!!

KappaChan
2番目以降のレコードを取得してみるかっぱ!!

配列から2番目に大きい要素を取り出してみよう

まずはLinqを使用し、下記の配列から2番目に大きい値を出力してみます。

2番目に大きい5を出力することが出来れば良さそうですね。

int[] numbers = { 2, 5, 4, 6, 3, 1 }; 

最大値や最小値を導くには、MaxやMinを使用することで、取得することができますが、

2番目に大きなメソッドを取得するメソッドは用意されていません。

色々考えた所、下記のようにLinqメソッドを組み合わせることで、実現することが出来ました。

 出力結果
5

3つのメソッドを組み合わせて実現することが出来ました。各メソッドの処理は下記の通りです。

step
1
OrderByDescending

配列の要素を降順に並べる。

6,5,4,3,2,1

step
2
Skip

1つ目の要素を飛ばす。

5,4,3,2,1

step
3
FirstOrDefault

1つ目の要素のみ取得する。

以上の流れで二つ目に大きい数を取得することが出来ましたね。

ソートを行って実現しているため、膨大な量の要素を持っている配列やリストで使う時は要注意です。

上記の処理をGroupBy後の各グループにも使ってみましょう。

KappaChan
性能を重視する処理で使用する場合は、気を付けるかっぱ!

ロボットリストのGroupBy後に各グループで2つ目に大きい要素を取り出してみよう。

それでは、下記のロボットクラスを用いて2番目に大きいレコードのみ出力してみましょう。

今回は色別のグループに分けて、各グループの2番目に強いロボット名を出力してみます。

step
1
使用するロボットクラス

step
2
ロボットリストに追加するレコード

step
3
色別にグループ化

var colorrobots = robotlist.GroupBy(n => n.getColor()); 

step
4
色別のグループ2番目に強いロボットのみ出力

グループ化したリストに対して、上記で使用したメソッドの組み合わせを使用しましょう!

各グループに2体以上のロボットが存在しない場合はnullが返されるので除外します。

まとめ(全体のソースコード)

以上を纏めると、下記のようなコードになりました。

 出力結果
Iceman
-------------
Fireman
-------------
-------------
Woodman
-------------

色別で2番目に強いロボット名のみ表示されていますね。ピンクの場合は2体以上いないので、空白で出力されています。

因みにSkipの値を変更すれば、3番目、4番目も同様に取得することが出来るので、是非使ってみてくださいね。

KappaChan
今回の記事は以上かっぱ!!

今回使用したメソッドについて、下記の記事で詳しく解説しています。

参考C# Linqは便利なので使い方を覚えよう。Count、SequenceEqual、FirstOrDefault、LastOrDefaultメソッドを解説します。

今回のテーマContents1 今回のテーマ2 LinqのCount、SequenceEqual、FirstOrDefaultについて2.1 Count2.2 SequenceEqual2.3 Fir ...

続きを見る

参考C# Linqは便利なので使い方を覚えよう。Take、Skip、TakeWhile、SkipWhileメソッドを解説します。

今回のテーマContents1 今回のテーマ2 Take、Skip、TakeWhile、SkipWhileについて2.1 Take2.2 Skip2.3 TakeWhile2.4 SkipWhile3 ...

続きを見る

参考C# Linqは便利なので使い方を覚えよう。Distinct、OrderBy、OrderByDescendingメソッドを解説します。

今回のテーマContents1 今回のテーマ2 Distinct、OrderBy、OrderByDescendingについて2.1 Distinct2.2 OrderBy2.3 OrderByDesc ...

続きを見る

合わせて読みたいC# Linqを勉強するならこれだけは読んでほしいオススメの本3選 オススメの参考書

C#を勉強するためのオススメの本を紹介Contents1 C#を勉強するためのオススメの本を紹介1.1 C#の基礎を学ぶなら「やさしいC#」1.2 C#の全体像を学ぶなら「独習C#」1.3 C#をさら ...

続きを見る

プログラミングを一人で独学をするならプロからオンラインで教えてもらいましょう!10倍効率いいです!!

数多くあるプログラミング教室の中で2つのオンライン教室を厳選しました!どちら共、エンジニアとしての就職までサポートしてくれる本当にオススメの教室です。個別相談は完全無料です!!

カウンセリングは完全無料!未経験でITエンジニアを目指したい方にオススメ!

Webエンジニアになりたい方にオススメ!個別相談は無料!

KappaChan
オンラインのプログラミング教室は本当にオススメかっぱ!!

新しいサイト作りました。アニメのまとめサイトです。

レインボーリアルタイムTwitter(アニメ版)

レインボーリアルタイムTwitter(映画版)

-Linq

X