C# Array クラス
Array クラスは C# のすべての配列の基底クラスであり、System 名前空間で定義されています。Array クラスは、配列に使用するさまざまなプロパティとメソッドを提供します。
C# の Array クラスはすべての配列の基底クラスであり、System 名前空間にあります。
配列は、固定サイズで同じ型の要素を格納するためのコレクションです。Array クラスの特徴とメソッドを理解することは、効率的な C# プログラムを書くために非常に重要です。
以下は、C# の Array クラスについての詳細な説明で、その特徴、よく使われるメソッド、プロパティ、および使用例を含みます。
特徴
- 型安全性:配列は指定された型の要素のみを格納でき、型は宣言時に決定されます。
- 固定長:配列の長さは作成後に変更できません。
- インデックスアクセス:配列の要素にはインデックスでアクセスし、インデックスは 0 から始まります。
- 多次元サポート:C# は、1次元、多次元、およびジャグ配列(配列の配列)をサポートしています。
Array クラスのプロパティ
次の表に、Array クラスで最もよく使用されるプロパティの一部を示します。
| プロパティ名 | 説明 | サンプルコード | 出力 |
|---|---|---|---|
| Length | 配列内の要素の総数を取得します。 | int[] arr = {1, 2, 3};int length = arr.Length; | 3 |
| Rank | 配列の次元数を取得します(つまり、配列の次元)。 | int[,] matrix = new int[2, 3];int rank = matrix.Rank; | 2 |
| IsFixedSize | 配列のサイズが固定されているかどうかを判断します。 | int[] arr = {1, 2, 3};bool fixedSize = arr.IsFixedSize; | true |
| IsReadOnly | 配列が読み取り専用かどうかを判断します。 | int[] arr = {1, 2, 3};bool readOnly = arr.IsReadOnly; | false |
| IsSynchronized | 配列がスレッドセーフかどうかを判断します。 | int[] arr = {1, 2, 3};bool sync = arr.IsSynchronized; | false |
| SyncRoot | 配列アクセスを同期するために使用されるオブジェクトを取得します。通常はマルチスレッド操作で使用します。 | int[] arr = {1, 2, 3};object syncRoot = arr.SyncRoot; | syncRoot |
Array クラスの完全なプロパティ一覧については、マイクロソフトの C# ドキュメントを参照してください。
Array クラスのメソッド
次の表に、Array クラスで最もよく使用されるメソッドの一部を示します。
| 番号 | メソッド & 説明 |
|---|---|
| 1 | Clear 要素の型に応じて、配列内の特定の範囲の要素を 0、false、または null に設定します。 |
| 2 | Copy(Array, Array, Int32) 配列の最初の要素から特定の範囲の要素を、別の配列の最初の要素の位置にコピーします。長さは 32 ビット整数で指定されます。 |
| 3 | CopyTo(Array, Int32) 現在の 1 次元配列のすべての要素を、指定した 1 次元配列の指定したインデックス位置にコピーします。インデックスは 32 ビット整数で指定されます。 |
| 4 | GetLength 指定した次元の配列内の要素の総数を表す 32 ビット整数を取得します。 |
| 5 | GetLongLength 指定した次元の配列内の要素の総数を表す 64 ビット整数を取得します。 |
| 6 | GetLowerBound 配列内の指定した次元の下限を取得します。 |
| 7 | GetType 現在のインスタンスの型を取得します。オブジェクト(Object)から継承されます。 |
| 8 | GetUpperBound 配列内の指定した次元の上限を取得します。 |
| 9 | GetValue(Int32) 1 次元配列の指定した位置の値を取得します。インデックスは 32 ビット整数で指定されます。 |
| 10 | IndexOf(Array, Object) 指定したオブジェクトを検索し、1 次元配列全体で最初に出現するインデックスを返します。 |
| 11 | Reverse(Array) 1 次元配列全体の要素の順序を逆にします。 |
| 12 | SetValue(Object, Int32) 1 次元配列の指定した位置の要素に値を設定します。インデックスは 32 ビット整数で指定されます。 |
| 13 | Sort(Array) 配列の各要素の IComparable 実装を使用して、1 次元配列全体の要素を並べ替えます。 |
| 14 | ToString 現在のオブジェクトを表す文字列を返します。オブジェクト(Object)から継承されます。 |
その他のメソッドの詳細
AsReadOnly<T>(T[])
- 指定した配列の読み取り専用ラッパーを返します。
BinarySearch
BinarySearch(Array, Int32, Int32, Object, IComparer):並べ替えられた配列内の値を検索します。指定されたIComparerインターフェイスを使用します。BinarySearch(Array, Int32, Int32, Object):並べ替えられた配列内の値を検索します。IComparableインターフェイスを使用します。BinarySearch(Array, Object, IComparer):並べ替えられた配列を検索します。指定されたIComparerインターフェイスを使用します。BinarySearch(Array, Object):並べ替えられた配列を検索します。IComparableインターフェイスを使用します。BinarySearch<T>(T[], Int32, Int32, T, IComparer<T>):ジェネリック配列の範囲内の値を検索します。指定されたIComparer<T>インターフェイスを使用します。BinarySearch<T>(T[], Int32, Int32, T):ジェネリック配列の範囲内の値を検索します。IComparable<T>インターフェイスを使用します。BinarySearch<T>(T[], T, IComparer<T>):並べ替えられたジェネリック配列を検索します。指定されたIComparer<T>インターフェイスを使用します。BinarySearch<T>(T[], T):並べ替えられたジェネリック配列を検索します。IComparable<T>インターフェイスを使用します。
Clear
Clear(Array, Int32, Int32):配列内の指定した範囲の要素を既定値に設定します。Clear(Array):配列の内容をクリアします。
Clone
- 配列のシャローコピー(浅いコピー)を作成します。
ConstrainedCopy
- ソース配列から指定した範囲の要素をターゲット配列にコピーし、コピー操作全体が成功した後に変更が行われることを保証します。
ConvertAll<TInput, TOutput>(TInput[], Converter<TInput, TOutput>)
- ある型の配列を別の型の配列に変換します。
Copy
Copy(Array, Array, Int32):配列要素をターゲット配列にコピーします。長さは 32 ビット整数です。Copy(Array, Array, Int64):配列要素をターゲット配列にコピーします。長さは 64 ビット整数です。Copy(Array, Int32, Array, Int32, Int32):ソース配列から指定した範囲の要素をターゲット配列にコピーします。Copy(Array, Int64, Array, Int64, Int64):ソース配列から指定した範囲の要素をターゲット配列にコピーします。CopyTo(Array, Int32):現在の配列をターゲット配列にコピーします。ターゲット配列のどのインデックス位置から開始するかを指定します。CopyTo(Array, Int64):上記と同じですが、インデックスは 64 ビット整数です。
CreateInstance
CreateInstance(Type, Int32):指定した型と長さを持つ 1 次元配列を作成します。CreateInstance(Type, Int32, Int32):2 次元配列を作成します。CreateInstance(Type, Int32, Int32, Int32):3 次元配列を作成します。CreateInstance(Type, Int32[]):指定した次元を使用して多次元配列を作成します。CreateInstance(Type, Int64[]):64 ビット整数の次元を使用して多次元配列を作成します。
Empty<T>
- 空の配列インスタンスを返します。
Exists<T>(T[], Predicate<T>)
- 配列に条件を満たす要素が含まれているかどうかを判断します。
Fill<T>(T[], T, Int32, Int32)
- 配列内の指定したインデックス範囲のすべての要素を指定された値で埋めます。
Fill<T>(T[], T):配列全体の要素を指定された値で埋めます。
Find
Find<T>(T[], Predicate<T>):条件を満たす最初の要素を検索して返します。FindAll<T>(T[], Predicate<T>):条件を満たすすべての要素を返します。FindIndex<T>(T[], Int32, Int32, Predicate<T>):配列の指定した範囲内で、条件を満たす最初の要素のインデックスを返します。FindIndex<T>(T[], Int32, Predicate<T>):指定したインデックスの後に、条件を満たす最初の要素のインデックスを返します。FindIndex<T>(T[], Predicate<T>):条件を満たす最初の要素のインデックスを返します。FindLast<T>(T[], Predicate<T>):条件を満たす最後の要素を返します。FindLastIndex<T>(T[], Int32, Int32, Predicate<T>):配列の指定した範囲内で、条件を満たす最後の要素のインデックスを返します。FindLastIndex<T>(T[], Predicate<T>):条件を満たす最後の要素のインデックスを返します。
ForEach<T>(T[], Action<T>)
- 配列の各要素に対して指定した操作を実行します。
GetEnumerator()
- 配列の列挙子を取得します。
GetLength
GetLength(Int32):配列の指定した次元の要素数を取得します。
GetLongLength(Int32)
- 配列の長さを 64 ビット整数として取得します。
GetLowerBound(Int32)
- 配列の指定した次元の最初の要素のインデックスを取得します。
GetUpperBound(Int32)
- 配列の指定した次元の最後の要素のインデックスを取得します。
GetValue
GetValue(Int32):1 次元配列の指定したインデックスの値を取得します。GetValue(Int32, Int32):2 次元配列の指定したインデックスの値を取得します。GetValue(Int32, Int32, Int32):3 次元配列の指定したインデックスの値を取得します。GetValue(Int32[]):多次元配列の値を取得します。
IndexOf
IndexOf(Array, Object):指定したオブジェクトが最初に出現するインデックスを返します。IndexOf(Array, Object, Int32):指定したオブジェクトが配列内の特定の範囲で最初に出現するインデックスを返します。IndexOf(Array, Object, Int32, Int32):指定したオブジェクトが配列内の指定した範囲で最初に出現するインデックスを返します。
LastIndexOf
- 類似しています
IndexOfが、配列の末尾から検索を開始します。
- 類似しています
Resize<T>(T[], Int32)
- 1 次元配列のサイズを変更します。
Reverse
Reverse(Array):配列内の要素の順序を反転します。Reverse<T>(T[]):ジェネリック配列内の要素の順序を反転します。
SetValue
SetValue(Object, Int32):配列の指定したインデックスの値を設定します。SetValue(Object, Int32, Int32):2 次元配列の指定した位置の値を設定します。
Sort
Sort(Array):配列を並べ替えます。Sort<T>(T[], IComparer<T>):ジェネリック配列を並べ替えます。
TrueForAll<T>(T[], Predicate<T>)
- 配列内のすべての要素が条件を満たすかどうかを判断します。
Array クラスの完全なメソッド一覧については、マイクロソフトの C# ドキュメントを参照してください。
例
次のプログラムは、Array クラスのいくつかのメソッドの使用方法を示しています。
例
namespace ArrayApplication
{
class MyArray
{
static void Main(string[] args)
{
int[] list = { 34, 72, 13, 44, 25, 30, 10 };
Console.Write("元の配列: ");
foreach (int i in list)
{
Console.Write(i + " ");
}
Console.WriteLine();
// 配列を反転
Array.Reverse(list);
Console.Write("反転した配列: ");
foreach (int i in list)
{
Console.Write(i + " ");
}
Console.WriteLine();
// 配列を並べ替え
Array.Sort(list);
Console.Write("並べ替えた配列: ");
foreach (int i in list)
{
Console.Write(i + " ");
}
Console.WriteLine();
Console.ReadKey();
}
}
}
上記のコードをコンパイルして実行すると、次の結果が生成されます。
原始数组: 34 72 13 44 25 30 10 逆转数组: 10 30 25 44 13 72 34 排序数组: 10 13 25 30 34 44 72
よく使用されるメソッドの例
1. Array.Clear(Array, int index, int length)
配列内の指定した範囲の要素を、その型の既定値に設定します。
int[] arr = {1, 2, 3, 4, 5};
Array.Clear(arr, 1, 2); // arr = {1, 0, 0, 4, 5}2. Array.Copy(Array sourceArray, Array destinationArray, int length)
ソース配列からターゲット配列に要素をコピーします。
int[] source = {1, 2, 3};
int[] destination = new int[3];
Array.Copy(source, destination, 3); // destination = {1, 2, 3}
3. Array.Clone()
配列のシャローコピー(浅いコピー)を作成します。
int[] arr = {1, 2, 3};
int[] clonedArr = (int[])arr.Clone();
4. Array.IndexOf(Array array, object value)
指定した要素が 1 次元配列内で最初に出現するインデックスを返します。
int[] arr = {1, 2, 3, 2};
int index = Array.IndexOf(arr, 2); // index = 1
5. Array.LastIndexOf(Array array, object value)
指定した要素が 1 次元配列内で最後に出現するインデックスを返します。
int[] arr = {1, 2, 3, 2};
int lastIndex = Array.LastIndexOf(arr, 2); // lastIndex = 3
6. Array.Reverse(Array array)
1 次元配列内の要素の順序を反転します。
int[] arr = {1, 2, 3};
Array.Reverse(arr); // arr = {3, 2, 1}
7. Array.Sort(Array array)
1 次元配列の要素を昇順に並べ替えます。
int[] arr = {3, 1, 2};
Array.Sort(arr); // arr = {1, 2, 3}
8. Array.BinarySearch(Array array, object value)
並べ替えられた 1 次元配列内で要素を検索し、そのインデックスを返します。
int[] arr = {1, 2, 3, 4, 5};
int index = Array.BinarySearch(arr, 3); // index = 2
注意:BinarySearch を使用する前に、配列が並べ替えられている必要があります。
9. Array.Resize
1 次元配列のサイズを変更します。
int[] arr = {1, 2, 3};
Array.Resize(ref arr, 5); // arr = {1, 2, 3, 0, 0}
10. Array.Exists<T>(T[] array, Predicate
配列内に条件を満たす要素が存在するかどうかを判断します。
int[] arr = {1, 2, 3};
bool exists = Array.Exists(arr, x => x == 2); // exists = true
11. Array.Find<T>(T[] array, Predicate
配列内で条件に一致する最初の要素を検索します。
int[] arr = {1, 2, 3, 4};
int result = Array.Find(arr, x => x > 2); // result = 3
12. Array.FindAll<T>(T[] array, Predicate
配列内で条件に一致するすべての要素を検索します。
int[] arr = {1, 2, 3, 4};
int[] results = Array.FindAll(arr, x => x > 2); // results = {3, 4}
13. Array.FindIndex<T>(T[] array, Predicate
条件に一致する最初の要素のインデックスを返します。
int[] arr = {1, 2, 3, 4};
int index = Array.FindIndex(arr, x => x > 2); // index = 2
14. Array.FindLast<T>(T[] array, Predicate
条件に一致する最後の要素を検索します。
int[] arr = {1, 2, 3, 4};
int result = Array.FindLast(arr, x => x > 2); // result = 4
15. Array.FindLastIndex<T>(T[] array, Predicate
条件に一致する最後の要素のインデックスを返します。
int[] arr = {1, 2, 3, 4};
int index = Array.FindLastIndex(arr, x => x > 2); // index = 3
16. Array.TrueForAll<T>(T[] array, Predicate
配列内のすべての要素が条件を満たすかどうかを判断します。
int[] arr = {1, 2, 3};
bool allPositive = Array.TrueForAll(arr, x => x > 0); // allPositive = true
17. Array.ForEach<T>(T[] array, Action
配列の各要素に対して指定された操作を実行します。
int[] arr = {1, 2, 3};
Array.ForEach(arr, x => Console.WriteLine(x)); // 输出 1 2 318. Array.ConstrainedCopy(Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length)
配列の一部の要素を別の配列にコピーし、コピーが失敗した場合にデータが破損しないようにします。
int[] source = {1, 2, 3, 4, 5};
int[] destination = new int[5];
Array.ConstrainedCopy(source, 0, destination, 0, 5);
19. Array.Fill<T>(T[] array, T value)
配列のすべての要素を指定された値に設定します。
int[] arr = new int[5];
Array.Fill(arr, 10); // arr = {10, 10, 10, 10, 10}
20. Array.AsReadOnly<T>(T[] array)
配列の読み取り専用ラッパーを返します。
int[] arr = {1, 2, 3};
var readOnlyArr = Array.AsReadOnly(arr);
// readOnlyArr[0] = 5; // 编译错误,集合是只读的
例
class Program
{
static void Main()
{
// 配列を作成して初期化する
int[] numbers = {5, 2, 8, 1, 3};
// 配列を並べ替える
Array.Sort(numbers); // numbers = {1, 2, 3, 5, 8}
// 要素を検索する
int index = Array.BinarySearch(numbers, 5); // index = 3
// 配列を反転する
Array.Reverse(numbers); // numbers = {8, 5, 3, 2, 1}
// 6 より大きい要素が存在するか確認する
bool exists = Array.Exists(numbers, x => x > 6); // exists = true
// 配列の要素を 2 倍にする
Array.ForEach(numbers, x => Console.WriteLine(x * 2));
// 配列のサイズを変更する
Array.Resize(ref numbers, 7); // numbers = {8, 5, 3, 2, 1, 0, 0}
// 新しい要素を埋め込む
Array.Fill(numbers, 10, 5, 2); // インデックス 5 から始まる 2 つの要素を 10 に設定する
// numbers = {8, 5, 3, 2, 1, 10, 10}
}
}
C# 配列