Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
Array.IndexOf() / Array.Copy()
配列の中から指定した値を検索する『Array.IndexOf()』と、配列の内容を別の配列にコピーする『Array.Copy()』メソッドです。
構文
// 配列の中で value が最初に現れるインデックスを返します。見つからない場合は -1 を返します。 Array.IndexOf(T[] array, T value) // array の sourceIndex から length 個の要素を destinationArray の destinationIndex にコピーします。 Array.Copy(T[] sourceArray, int sourceIndex, T[] destinationArray, int destinationIndex, int length) // array の先頭から length 個の要素を destinationArray の先頭にコピーします。 Array.Copy(T[] sourceArray, T[] destinationArray, int length)
メソッド一覧
| メソッド | 概要 |
|---|---|
| Array.IndexOf(T[] array, T value) | 配列の中で value と一致する最初の要素のインデックスを返します。見つからない場合は -1 を返します。 |
| Array.IndexOf(T[] array, T value, int startIndex) | startIndex から検索を開始し、最初に一致した要素のインデックスを返します。 |
| Array.Copy(Array src, Array dst, int length) | src の先頭から length 個の要素を dst の先頭にコピーします。 |
| Array.Copy(Array src, int srcIdx, Array dst, int dstIdx, int length) | src の srcIdx から length 個の要素を dst の dstIdx にコピーします。 |
サンプルコード
using System;
// Array.IndexOf() で要素の位置を探します。
string[] 言語 = { "C#", "Java", "Python", "Go", "Rust" };
int 位置 = Array.IndexOf(言語, "Python");
Console.WriteLine(位置); // 2
// 見つからない場合は -1 が返ります。
int なし = Array.IndexOf(言語, "Swift");
Console.WriteLine(なし); // -1
// 存在チェックとして使う例です。
string 検索 = "Java";
if (Array.IndexOf(言語, 検索) != -1)
{
Console.WriteLine($"{検索} は配列内に存在します。");
}
// Array.Copy() で配列全体をコピーします。
int[] 元 = { 10, 20, 30, 40, 50 };
int[] コピー先 = new int[元.Length];
Array.Copy(元, コピー先, 元.Length);
コピー先[0] = 999;
Console.WriteLine(元[0]); // 10(元の配列は変更されていません)
Console.WriteLine(コピー先[0]); // 999
// 部分コピーの例です(インデックス1から3要素をコピー先のインデックス0へ)。
int[] 部分 = new int[3];
Array.Copy(元, 1, 部分, 0, 3);
Console.WriteLine(string.Join(", ", 部分)); // 20, 30, 40
概要
『Array.Copy()』はシャローコピー(浅いコピー)を行います。参照型の要素(クラスのインスタンスなど)を含む配列の場合、コピー先の要素は元の配列と同じオブジェクトを参照します。値型(int, double など)の配列では問題ありません。
配列の内容を確認したい場合は、事前に『Length / Array.Resize()』で要素数を確認し、インデックス範囲内でアクセスしてください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。