1. ホーム
  2. c#

[解決済み】数値が範囲内にあるかどうかをエレガントにチェックする方法とは?

2022-04-08 15:22:29

質問

C#でエレガントに行うにはどうしたらよいでしょうか?

例えば、1~100の数字があります。

私は、単純な if (x >= 1 && x <= 100) しかし、C#/.Netには多くのシンタックスシュガーや新しい機能が常に追加されているため、この質問では、よりイディオム(エレガントと呼ぶこともできる)な書き方について尋ねています。

パフォーマンスは気になりませんが、人々が提案をコピーペーストする可能性があるので、O(1)でない解決策にパフォーマンスの注意を追加してください。

解決方法は?

いろいろな選択肢がありますね。

int x = 30;
if (Enumerable.Range(1,100).Contains(x))  //true

そして、確かに基本的な if のように、順序を逆にして書くと、よりエレガントになります。

if (1 <= x && x <= 100)   //true

また、次のことも確認してください。 SOポスト は、正規表現のオプションです。

注意事項

  • LINQ ソリューションは、厳密にスタイル ポイントのためのものです。Contains はすべてのアイテムに対して反復するので、その複雑さは O(range_size) であり、通常範囲チェックで期待される O(1) ではありません。

    他の範囲に対するより一般的なバージョン(第2引数が end ではなく count であることに注意)。

    if (Enumerable.Range(start, end - start + 1).Contains(x)
    
    
  • という誘惑があります。 if を使わずに解決します。 && のように 1 <= x <= 100 - しかし、C#では、演算子 '<=' を 'bool' 型と 'int' 型のオペランドに適用できないという構文エラーが発生します。