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#のIComparableの実装方法+IComparerとの違いについて

<目次> (1) C#のIComparableの実装方法+IComparerとの違いについて  (1-1) IComparableの概要とIComparableとの違い  (1-2) STEP0:比較 …

ASP.NETのMVCとは?入門者向けの概要説明やHelloWorld

<目次> (1) ASP.NETのMVCとは?入門者向けの概要説明やHelloWorld  (1-1) ASP.NET MVC5とは?  (1-2) MVCのアーキテクチャ概要  (1-3) ASP. …

C#のDB接続時のエラー(provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server)

<目次> (1) 記事の目的  (1-1) エラー概要  (1-2) エラー原因  (1-3) エラー対策   (1-3-1) SQLServer:リモート接続を有効化   (1-3-2) SQLSe …

Xamarin.FormsでHelloworldする手順+Buttonコントロール追加のサンプルコード紹介

<目次> (1) Xamarin.FormsでHelloworldする手順  (1-1) Xamarin.Formsプロジェクト構成の概要  (1-2) MainPage.xamlの修正  (1-3) …

C#のエラー「CS1069~このアセンブリへの参照を追加する事を検討してください」の対処方法+実際のソース例も掲載

<目次> (1) C#のエラー「CS1069~このアセンブリへの参照を追加する事を検討してください」の対処方法  (1-1) 発生状況・エラーメッセージ  (1-2) 原因  (1-3) 対処法 (1 …

  • English (United States)
  • 日本語
Top