LINQ:数値コレクション内の最小値/最大値を求めるには?[C#、VB].NET TIPS

LINQのMin/Max拡張メソッドを使って、簡潔なコードで数値のコレクションの中から最小値/最大値を検索する方法を解説する。

» 2014年09月09日 12時14分 公開
.NET TIPS
Insider.NET

 

「.NET TIPS」のインデックス

連載目次

対象:.NET 3.5以降

 配列やコレクションに格納されている数値から最小値/最大値を見つけ出すコードを書くのは、意外と面倒なものだ。もっと簡潔に書けたらよいのにと思ったことはないだろうか? LINQを使えばそれが可能だ。本稿ではその方法を説明する。

従来の書き方

 例えば1から10までの整数が格納されたコレクションがあるとき、その中から最小値/最大値を見つけ出すには、これまでなら次のようなループを使ったコードを書いていただろう。

var nums = System.Linq.Enumerable.Range(1, 10); // 1~10の整数を格納したコレクション
var min = int.MaxValue;
var max = int.MinValue;
foreach (var n in nums)
{
  if (min > n)
    min = n;
  if (max < n)
    max = n;
}
Console.WriteLine("{0},{1}", min, max); // →1,10

Dim nums = System.Linq.Enumerable.Range(1, 10) ' 1~10の整数を格納したコレクション
Dim min = Integer.MaxValue
Dim max = Integer.MinValue
For Each n In nums
  If (min > n) Then
    min = n
  End If
  If (max < n) Then
    max = n
  End If
Next
Console.WriteLine("{0},{1}", min, max) ' →1,10

ループで最小値/最大値を見つけ出すコード例(上:C#、下:VB)
ここで使っているEnumerableクラス(System.Linq名前空間)のRangeメソッドは、引数に指定した範囲の整数シーケンスを生成してくれるものだ(第1引数は開始数、第2引数は生成数)。コレクションのインスタンスを作成し、そこに1から10までの整数を追加することと同じである。

LINQで最小値/最大値を取得する

 System.Linq名前空間のEnumerableクラスには、コレクションの中から最小値を取得するMin拡張メソッドと、最大値を取得するMax拡張メソッドが用意されている。これらを使うと、最小値/最大値を取得するコードは次のようにごく簡潔に書ける。

var nums = Enumerable.Range(1, 10); // 1~10の整数を格納したコレクション
var min = nums.Min(); // 最小値
var max = nums.Max(); // 最大値
Console.WriteLine("{0},{1}", min, max); // →1,10

Dim nums = Enumerable.Range(1, 10) ' 1~10の整数を格納したコレクション
Dim min = nums.Min() ' 最小値
Dim max = nums.Max() ' 最大値
Console.WriteLine("{0},{1}", min, max) ' →1,10

LINQで最小値/最大値を見つけ出すコード例(上:C#、下:VB)
この他に、Enumerableクラスの拡張メソッドを使用するため、System.Linq名前空間のインポートが必要だ。

 なお、このMin拡張メソッド/Max拡張メソッドにはnull許容型(Nullable型)を受け取るオーバーロードも用意されているので、コレクションにnull/Nothingが含まれていても問題ない。null/Nothingを除外して、最小値/最大値を見つけ出してくれる。

利用可能バージョン:.NET Framework 3.5以降
カテゴリ:クラスライブラリ 処理対象:LINQ
使用ライブラリ:Enumerableクラス(System.Linq名前空間)
関連TIPS:[LINQ]数値コレクション内の数値を集計するには?[.NET3.5、C#、VB]

「.NET TIPS」のインデックス

.NET TIPS

鬯ゥ謳セ�ス�オ�ス�ス�ス�コ鬯ョ�ヲ�ス�ョ髯キ�サ�ス�サ�ス�ス�ス�ソ�ス�ス�ス�ス鬯ッ�ッ�ス�ィ�ス�ス�ス�セ�ス�ス�ス�ス�ス�ス�ス�」鬯ッ�ョ�ス�エ髣費ソス�ス�・�ス�ス�ス�ウ�ス�ス�ス�ィ�ス�ス�ス�ス髯懶ス」�ス�、�ス�ス�ス�ク�ス�ス�ス�イ鬯ゥ蠅捺��ス�ソ�ス�ス�ス縺、ツ€�ス�ス�ス�ス�ス�ス�ス�」鬯ッ�ョ�ス�エ鬯ゥ蟶壽桶�ス�ュ鬮ョ�」�ス�ソ�ス�ス�ス�ス�ス�ィ鬮ッ蛹コ�サ繧托スス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬮」蛹�スス�オ髫エ謫セ�ス�エ�ス�ス隶難ス」�守「托スュ雜」�ス�「�ス�ス�ス�ス�ス�ス�ス�ゥ鬯ゥ蟷「�ス�「髫エ雜」�ス�「�ス�ス�ス�ス�ス�ス�ス�シ鬯ゥ蟷「�ス�「髫エ荳サ�ス隶捺サゑスソ�ス邵コ�、�つ€鬯ッ�ョ�ス�ヲ�ス�ス�ス�ェ鬩包スカ闔ィ�ス�ス�ヲ�ス�エ�ス縺、ツ€髯キ闌ィ�ス�キ�ス�ス�ス�ス�ス�ス�ス�サ鬯ッ�ッ�ス�ェ�ス�ス�ス�ュ�ス�ス�ス�ス�ス�ス�ス�イ鬯ゥ謳セ�ス�オ�ス�ス�ス�コ鬮ッ�キ�ス�キ�ス�ス�ス�カ�ス�ス�ス�ス�ス�ス�ス�ス New

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

鬯ッ�ゥ隰ウ�セ�ス�ス�ス�ア鬮」蛹�スス�ウ髫カ謐コ諷」�ス�ス�ス�イ�ス�ス�ス�ス 鬯ッ�ョ�ス�ォ�ス�ス�ス�ェ鬮ッ蛹コ�サ繧托スス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬮」蛹�スス�オ髫エ竏オ�コ�キ�ス�ク�ス�キ�ス�ス�ス�ケ髫エ雜」�ス�「�ス�ス�ス�ス�ス�ス�ス�ウ鬯ゥ蟷「�ス�「�ス�ス�ス�ァ�ス�ス�ス�ス�ス�ス�ス�ュ鬯ゥ蟷「�ス�「髫エ雜」�ス�「�ス�ス�ス�ス�ス�ス�ス�ウ鬯ゥ蟷「�ス�「�ス�ス�ス�ァ�ス�ス�ス�ス�ス�ス�ス�ー

鬯ョ�ォ�ス�エ髯晢スキ�ス�「�ス�ス�ス�ス�ス�ス�ス�ャ鬯ョ�ォ�ス�エ鬯イ�ス�シ螟イ�ス�ス�ス�ス�ス�ス�ス�・鬯ョ�ォ�ス�エ髯晢スカ�ス�キ�ス�ス�ス�」�ス�ス�ス�ッ鬮」蜴�スス�ォ�ス�ス�ス�」

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。