2020年10月07日
川俣晶の縁側ソフトウェアC# コーディング How Tototal 354 count

【入門級】3つの値の最大値を得る方法

Written By: 川俣 晶連絡先

3つの値の最大値を得る方法 §

 2つの値の最大値を得るにはMath.Maxメソッドを使います。

 しかし、これには引数が2つしかありません。

 3つの値だったらどうでしょう。

 やり方は複数あります。

 1つは、Math.Maxメソッドを2回使う方法です。Math.Max(a, Math.Max(b, c));と書けば可能です。

 もう1つはLINQのMaxメソッドを使う方法です。しかし、それを使うには元データを列挙オブジェクトとして用意しなければなりません。そのためにサンプルソースではnew int[] { a, b, c }.Max();と書いて一時的に配列を作成しています。

 もうちょっとソースを簡潔にするために、任意の個数のデータから列挙を生成するサービスメソッドcreateEnumを追加してみた事例を方法3として追加してあります。こうするとメソッドのソースはすっきりしますが、結局サービスメソッドの引数として配列を作成してしまうので効率が良くなるわけではありません。

 サンプルソースに3つの方法を紹介しましたが、どの方法を使うべきかはケースバイケースです。値が本当に3つだけなら方法1でも良いですが、実は3個以上のN個ならLINQの方がベターです。

罠の数々 §

  • 最小値も同じ方法で行ける。しかし、平均値は同じ方法では得られないかもしれない。3つの値の平均と、2つの値の平均ともう1つの値の平均は同じにならないかもしれないからだ。

参考リンク §

Math.Max メソッド

Enumerable.Max メソッド

Math クラス

Enumerable クラス

 MathクラスとEnumerableクラスは同じ機能を持っているわけではない。たとえば、最大値と最小値を計算するメソッドはどちらにもあるが、平均値を計算するメソッドをEnumerableクラスは持っているがMathクラスが持っていない。何があって何がないのか、上記のリンクから辿って確認してみよう。

リポジトリ §

https://github.com/autumn009/cshowto

max3 §

using System;

using System.Collections.Generic;

using System.Linq;

class Program

{

    private static IEnumerable<T> createEnum<T>(params T[] p) => p;

    static void Main()

    {

        // 比較する値

        int a = 1234;

        int b = 999;

        int c = 4949;

        // 方法1 Math.Max利用

        int max1 = Math.Max(a, Math.Max(b, c));

        Console.WriteLine($"{a}と{b}と{c}の最大値は{max1}");

        // 方法2 LINQ利用

        int max2 = new int[] { a, b, c }.Max();

        Console.WriteLine($"{a}と{b}と{c}の最大値は{max2}");

        // 方法3 LINQ+サービスメソッド利用

        int max3 = createEnum(a, b, c).Max();

        Console.WriteLine($"{a}と{b}と{c}の最大値は{max3}");

    }

}

実行結果

1234と999と4949の最大値は4949

1234と999と4949の最大値は4949

1234と999と4949の最大値は4949

Facebook

COOL C# CREW

キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
10月
10日
【入門級】円周率が欲しい
3days 1 count
total 493 count
【C# コーディング How To】の前のコンテンツ
2020年
10月
06日
【入門級】AからZまでの文字列を生成する
3days 1 count
total 276 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20201007092128
サイトの表紙【C# コーディング How To】の表紙【C# コーディング How To】のコンテンツ全リスト 【C# コーディング How To】の入手全リスト 【C# コーディング How To】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.34 (Alpha-Test) Copyright (c) 2004-2018 Pie Dey.Co.,Ltd.