C# Класс Array
Класс Array является базовым классом для всех массивов в C# и определён в пространстве имён System. Класс Array предоставляет различные свойства и методы для массивов.
В C# класс Array является базовым классом для всех массивов и находится в пространстве имён System.
Массив — это коллекция, используемая для хранения фиксированного числа элементов одного типа. Понимание характеристик и методов класса Array очень важно для написания эффективных программ на C#.
Ниже приведено подробное введение в класс Array в C#, включая его характеристики, часто используемые методы, свойства и примеры использования.
Особенности
- Безопасность типов: Массивы могут хранить только элементы указанного типа, и тип определяется во время объявления.
- Фиксированная длина: Длину массива нельзя изменить после его создания.
- Доступ по индексу: Элементы массива доступны по индексу, и индекс начинается с 0.
- Поддержка многомерных массивов: C# поддерживает одномерные, многомерные и зубчатые массивы (массивы массивов).
Свойства класса Array
В следующей таблице перечислены некоторые из наиболее часто используемых свойств класса Array:
| Имя атрибута | Описание | Пример кода | Вывод |
|---|---|---|---|
| Длина | Возвращает общее число элементов в массиве. | 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 см. в документации Microsoft по C#.
Методы класса Array
В следующей таблице перечислены некоторые из наиболее часто используемых методов класса Array:
| Порядковый номер | Методы и описание |
|---|---|
| 1 | Понятно Устанавливает диапазон элементов массива в ноль, false или null в зависимости от типа элемента. |
| 2 | Copy(Array, Array, Int32) Копирует диапазон элементов из массива, начиная с первого элемента, в позицию первого элемента другого массива. Длина задаётся 32-битным целым числом. |
| 3 | CopyTo(Array, Int32) Копирует все элементы из текущего одномерного массива в указанную позицию индекса в указанном одномерном массиве. Индекс задаётся 32-битным целым числом. |
| 4 | GetLength Возвращает 32-битное целое число, представляющее общее количество элементов в указанном измерении массива. |
| 5 | GetLongLength Возвращает 64-битное целое число, представляющее общее количество элементов в указанном измерении массива. |
| 6 | GetLowerBound Возвращает нижнюю границу указанного измерения в массиве. |
| 7 | GetType Возвращает тип текущего экземпляра. Наследуется от Object. |
| 8 | GetUpperBound Возвращает верхнюю границу указанного измерения в массиве. |
| 9 | GetValue(Int32) Возвращает значение в указанной позиции в одномерном массиве. Индекс задается 32-битным целым числом. |
| 10 | IndexOf(Array, Object) Ищет указанный объект и возвращает индекс его первого вхождения во всем одномерном массиве. |
| 11 | Reverse(Array) Меняет порядок элементов на обратный во всем одномерном массиве. |
| 12 | SetValue(Object, Int32) Задает значение элемента в указанной позиции в одномерном массиве. Индекс задается 32-битным целым числом. |
| 13 | Sort(Array) Сортирует элементы во всем одномерном массиве, используя реализацию IComparable каждого элемента массива. |
| 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(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): Создаёт одномерный массив указанного типа и длины.CreateInstance(Type, Int32, Int32): Создаёт двумерный массив.CreateInstance(Type, Int32, Int32, Int32): Создаёт трёхмерный массив.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): Возвращает значение по указанному индексу одномерного массива.GetValue(Int32, Int32): Возвращает значение по указанному индексу двумерного массива.GetValue(Int32, Int32, Int32): Возвращает значение по указанному индексу трехмерного массива.GetValue(Int32[]): Возвращает значение многомерного массива.
IndexOf
IndexOf(Array, Object): Возвращает индекс первого вхождения указанного объекта.IndexOf(Array, Object, Int32): Возвращает индекс первого вхождения указанного объекта в заданном диапазоне массива.IndexOf(Array, Object, Int32, Int32): Возвращает индекс первого вхождения указанного объекта в указанном диапазоне массива.
LastIndexOf
- аналогично
IndexOf, но выполняет поиск с конца массива.
- аналогично
Resize<T>(T[], Int32)
- Изменяет размер одномерного массива.
Reverse
Reverse(Array): Изменяет порядок элементов в массиве на обратный.Reverse<T>(T[]): Изменяет порядок элементов в обобщённом массиве на обратный.
SetValue
SetValue(Object, Int32): Задает значение по указанному индексу массива.SetValue(Object, Int32, Int32): Задает значение в указанной позиции двумерного массива.
Sort
Sort(Array): Сортирует массив.Sort<T>(T[], IComparer<T>): Сортирует обобщенный массив.
TrueForAll<T>(T[], Predicate<T>)
- Определяет, все ли элементы массива удовлетворяют условию.
Полный список методов класса Array приведен в документации Microsoft по 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)
Возвращает индекс первого вхождения указанного элемента в одномерном массиве.
int[] arr = {1, 2, 3, 2};
int index = Array.IndexOf(arr, 2); // index = 1
5. Array.LastIndexOf(Array array, object value)
Возвращает индекс последнего вхождения указанного элемента в одномерном массиве.
int[] arr = {1, 2, 3, 2};
int lastIndex = Array.LastIndexOf(arr, 2); // lastIndex = 3
6. Array.Reverse(Array array)
Изменяет порядок элементов в одномерном массиве на обратный.
int[] arr = {1, 2, 3};
Array.Reverse(arr); // arr = {3, 2, 1}
7. Array.Sort(Array array)
Сортирует элементы одномерного массива по возрастанию.
int[] arr = {3, 1, 2};
Array.Sort(arr); // arr = {1, 2, 3}
8. Array.BinarySearch(Array array, object value)
Выполняет поиск элемента в отсортированном одномерном массиве и возвращает его индекс.
int[] arr = {1, 2, 3, 4, 5};
int index = Array.BinarySearch(arr, 3); // index = 2
Примечание:Перед использованием BinarySearch массив уже должен быть отсортирован.
9. Array.Resize
Изменяет размер одномерного массива.
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); // Установить 2 элемента, начиная с индекса 5, в 10
// numbers = {8, 5, 3, 2, 1, 10, 10}
}
}