Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

C#

C#で配列に特定の値があるか?をチェックする方法を2つご紹介~ContainsとLINQ~

投稿日:2020年11月18日 更新日:

<目次>

(1) C#で配列に特定の値があるか?をチェックする方法
 (1-1) 方法①:ListクラスのContainsメソッドを使う方法
  (1-1-1) 構文
  (1-1-2) サンプルプログラム
 (1-2) 方法②:LINQを使う方法
  (1-2-1) 構文
  (1-2-2) サンプルプログラム

(1) C#で配列に特定の値があるか?をチェックする方法

配列の中から特定の値があるかをチェックする、いわゆる「探索」のアルゴリズムについてご紹介します。やり方はいくつかありますが、今回は2つの方法をご紹介します。

(1-1) 方法①:ListクラスのContainsメソッドを使う方法

1つ目の方法はListクラスのContainsメソッドを使う方法です。

(1-1-1) 構文

(構文)

[List型].Contains([探したい値])

(構文説明)
まず[List型]の変数について、次のようなList型で定義した変数を指します。

//int型の例
List<int> ls = new List<int>();
//String型の例
List<string> ls = new List<string>();

そしてリスト型のオブジェクトの「Contains()」メソッドで、目的の値があるかどうかをチェックします。結果はboolean型で返ってくるので、if文の条件に入れる事でTrueの場合、つまり[探したい値]がある場合の処理を記述します(↓)。

if ([List型].Contains([探したい値])) { [存在する場合の処理]; }

単一の値の探索であればこの方法で十分と思いますが、もしも複数の値の探索で条件も複雑になってくる場合は、後述するLINQのやり方をオススメします。

目次にもどる

(1-1-2) サンプルプログラム

1つ目の方法「ListクラスのContainsメソッドを使う方法」のサンプルプログラムです。

(サンプルプログラム)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SampleProgram
{
  class Program
  {
    static void Main(string[] args)
    {
      //### <int型の例>
      int[] values = { 2017, 2019, 2021}; //事前データ仕込み
      intCheck(values);          //チェック実行
    }
    static void intCheck(int[] val)
    {
      //### 引数で受け取った配列を、List<int?>型の配列に順番に追加
      List<int?> ls = new List<int?>();
      for (int i = 0; i < val.Length; i++)
      {
        ls.Add(val[i]);
      }
      //### 特定の値があるか?のチェック
      if (ls.Contains(2017)) { Console.WriteLine("Int Check = 2017 exist !!!"); }
      if (ls.Contains(2018)) { Console.WriteLine("Int Check = 2018 exist !!!"); }
      if (ls.Contains(2019)) { Console.WriteLine("Int Check = 2019 exist !!!"); }
      if (ls.Contains(2020)) { Console.WriteLine("Int Check = 2020 exist !!!"); }
      if (ls.Contains(2021)) { Console.WriteLine("Int Check = 2021 exist !!!"); }
    }
  }
}

(実行結果)

目次にもどる

(1-2) 方法②:LINQを使う方法

LINQはC#等でSQLのようなクエリを実行できる技術です。これを用いて配列から特定の値を探すクエリを実行します。

(1-2-1) 構文

LINQはプログラムからSQLを実行する時と同じ要領で記述できて、ざっくり「クエリを変数で定義」⇒「クエリ実行&結果抽出」のステップになります。

(前半構文:クエリ定義)
まず[クエリ変数名]は「var型」で定義しており、様々な型が入り交じるケースに備えています。イコール以降はSQL文のように配列に対して実行するクエリを定義しています。

var [クエリ変数名] = from [取得値の変数名] in [配列]
                     where [取得値の変数名].Contains('[探索する文字]')
                     select [取得値の変数名];

(後半構文:クエリ実行)
foreachでクエリ結果の配列を順番にループして、値を[ループ取得値の変数名]に格納します。その各値について処理を行えます。

foreach (var [ループ取得値の変数名] in [クエリ変数名])
  [何かの処理]

目次にもどる

(1-2-2) サンプルプログラム

2つ目の方法である「LINQを使う方法」のサンプルプログラムをご紹介します。

(サンプルプログラム)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SampleProgram
{
  class Program
  {
    static void Main(string[] args)
    {
      //探索対象の配列を定義
      string[] big4_names = { "Roger Federer", "Rafael Nadal", "Novak Djokovic", "Andy Murray" };
      
      //探索のクエリを定義
      var myLinqQuery = from name in big4_names
               where name.Contains('e')
               select name;
      //クエリの実行
      foreach (var name in myLinqQuery)
        Console.WriteLine(name + " ");
    }
  }
}

(実行結果)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-C#

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

C#のIComparerの実装方法や用法について(サンプルプログラムあり)

<目次> (1) C#のIComparerの実装方法や用法について  (1-1) IComparerの概要  (1-2) STEP0:比較をするクラスの定義  (1-3) STEP1:ICompare …

ASP.NET MVCのルーティングの基本

<目次> (1) ASP.NET MVCのルーティングの基本  (1-1) 構文  (1-2) サンプルプログラム   ・RouteConfig.cs   ・Controller   ・View  ( …

C#で文字列をタブやスペースで区切り配列に格納する方法

<目次> (1) C#で文字列をタブやスペースで区切り配列に格納する方法  (1-1) 基本構文  (1-2) 基本構文サンプルプログラム  (1-3) 応用構文  (1-4) 応用構文サンプルプログ …

C#のIEnumerableとは?使い方(foreachでの要素取り出し)を順を追って解説

<目次> (1) C#のIEnumerableとは?使い方(foreachでの要素取り出し)を順を追って解説  (1-1) IEnumerableとは?  (1-2) IEnumerableの実装の流 …

C#で「(407) プロキシ認証が必要です」エラーが出た時の対処方法

  <目次> (1) C#で「(407) プロキシ認証が必要です」エラーが出た時の対処方法  (1-1) エラー事象  (1-2) 原因  (1-3) 対処例  (1-4) 補足:ID/Pa …

  • English (United States)
  • 日本語
Top