Linq

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

このブログではAffinger5を使用しています。

ブログテーマが気に入った方はコチラをクリック

今回のテーマ

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

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

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

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

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

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

サルモリ
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後の各グループにも使ってみましょう。

性能を重視する処理で使用する場合は、気を付けるんだよ!
サルモリ

ロボットリストの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番目も同様に取得することが出来るので、是非使ってみてくださいね。

サルモリ
今回の記事は以上だよ!!

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

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

このブログではAffinger5を使用しています。ブログテーマが気に入った方はコチラをクリック 今回のテーマ こんばんは、サルモリです。 今回は下記の記事の続きです。 CHECK 今回のテーマ Lin ...

続きを見る

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

このブログではAffinger5を使用しています。ブログテーマが気に入った方はコチラをクリック 今回のテーマ こんばんは、サルモリです。 下記の記事の続きです。今回もLinqのメソッドを紹介してきます ...

続きを見る

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

このブログではAffinger5を使用しています。ブログテーマが気に入った方はコチラをクリック 今回のテーマ こんばんは、サルモリです。 下記の記事の続きです。今回もLinqのメソッドを紹介してきます ...

続きを見る

C#のLinqをさらに学びたい方へ

C#のLinqを理解して頂くために参考書を執筆致しました!

Linqの演習問題はこちらの参考書に載せているので、問題を解いて理解を深めたい方はこちらの参考書チェックしてください!

下記の画像をクリック!!kindleunlimitedの会員であれば無料で見れます!

⇩初心者向け      ⇩中級者向け

C#でChatGPTAPIを使ってブログ作成を自動化しませんか?

-Linq

Ads Blocker Image Powered by Code Help Pro

広告ブロックを検出しました。

ブラウザの広告機能を使用して広告をブロックしていることが検出されました。
ブラウザの広告ブロッカーを無効にし、「更新」をクリックしてください。

Powered By
Best Wordpress Adblock Detecting Plugin | CHP Adblock