C#で配列の中に値が一致する要素があるかを判定する方法を紹介します。
配列の中に値が一致する要素があるかを調べる方法としてforループで配列の要素を一つずつ確認し、一致するものがあるかを調べる方法もありますが、ArrayクラスのIndexOfメソッドを使うことでよりシンプルに記述できます。
下図の画面を用意します。テキストボックス2つとボタンを1つ配置しました。
ボタンのClickイベントにコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace ArrayMatch
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string[] data = { "Penguin", "Niwatori", "Kujira", "Karugamo" };
int ret = Array.IndexOf(data, textBox_Input.Text);
if (ret >= 0) {
textBox_Output.Text += "一致している要素がありました。\r\n";
textBox_Output.Text += string.Format("{0:d}の要素です。\r\n",ret);
}
else {
textBox_Output.Text += "一致している要素はありませんでした。\r\n";
}
}
}
}
string[] data = { "Penguin", "Niwatori", "Kujira", "Karugamo" };
配列を用意します。
int ret = Array.IndexOf(data, textBox_Input.Text);
テキストボックスに入力された内容と同じ値を持つ要素が配列に存在するかをIndexOfメソッドを呼び出して判定します。値に一致する要素があった場合は一致する要素のインデックス番号を返します。一致する要素がなかった場合は負の値を返します。if (ret >= 0) {
textBox_Output.Text += "一致している要素がありました。\r\n";
textBox_Output.Text += string.Format("{0:d}の要素です。\r\n",ret);
}
else {
textBox_Output.Text += "一致している要素はありませんでした。\r\n";
}
IndexOfメソッドの戻り値をもとにテキストボックスにメッセージを表示します。
アプリケーションを実行します。配列の要素に一致する値を入力した場合は、一致している旨のメッセージを表示し要素の番号も表示します。
一致する要素がなかった場合は、その旨をテキストボックスに表示します。
IndexOfを使わずにforループで実装した場合のコードの例です。
private void button2_Click(object sender, EventArgs e)
{
int match = -1;
string[] data = { "Penguin", "Niwatori", "Kujira", "Karugamo" };
for (int i = 0; i < data.Length; i++) {
if (textBox_Input.Text == data[i]) {
match = i;
break;
}
}
if (match >= 0) {
textBox_Output.Text += "一致している要素がありました。\r\n";
textBox_Output.Text += string.Format("{0:d}の要素です。\r\n", match);
}
else {
textBox_Output.Text += "一致している要素はありませんでした。\r\n";
}
}