Как скопировать один массив в другой с
Все массивы в C# построены на основе класса Array из пространства имен System. Этот класс определяет ряд свойств и методов, которые мы можем использовать при работе с массивами. Основные свойства и методы:
Свойство Length возвращает длину массива
Свойство Rank возвращает размерность массива
int BinarySearch (Array array, object? value) выполняет бинарный поиск в отсортированном массиве и возвращает индекс найденного элемента
void Clear (Array array) очищает массив, устанавливая для всех его элементов значение по умолчанию
void Copy (Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length) копирует из массива sourceArray начиная с индекс sourceIndex length элементов в массив destinationArray начиная с индекса destinationIndex
bool Exists<T> (T[] array, Predicate<T> match) проверяет, содержит ли массив array элементы, которые удовлеворяют условию делегата match
void Fill<T> (T[] array, T value) заполняет массив array значением value
T? Find<T> (T[] array, Predicate<T> match) находит первый элемент, который удовлеворяет определенному условию из делегата match. Если элемент не найден, то возвращается null
T? FindLast<T> (T[] array, Predicate<T> match) находит последний элемент, который удовлеворяет определенному условию из делегата match. Если элемент не найден, то возвращается null
int FindIndex<T> (T[] array, Predicate<T> match) возвращает индекс первого вхождения элемента, который удовлеворяет определенному условию делегата match
int FindLastIndex<T> (T[] array, Predicate<T> match) возвращает индекс последнего вхождения элемента, который удовлеворяет определенному условию
T[] FindAll<T> (T[] array, Predicate<T> match) возвращает все элементы в виде массива, которые удовлеворяет определенному условию из делегата match
int IndexOf (Array array, object? value) возвращает индекс первого вхождения элемента в массив
int LastIndexOf (Array array, object? value) возвращает индекс последнего вхождения элемента в массив
void Resize<T> (ref T[]? array, int newSize) изменяет размер одномерного массива
void Reverse (Array array) располагает элементы массива в обратном порядке
void Sort (Array array) сортирует элементы одномерного массива
Разберем самые используемые методы.
Поиск индекса элемента
Если элемент не найден в массиве, то методы возвращают -1.
Поиск элемента по условию
Изменение порядка элементов массива
Например, изменим порядок элементов:
Также можно изменить порядок только части элементов:
В данном случае изменяем порядок только 3 элементов начиная c индекса 1.
Изменение размера массива
Для изменения размера массива применяется метод Resize. Его первый параметр — изменяемый массив, а второй параметр — количество элементов, которые должны быть в массиве. Если второй параметр меньше длины массива, то массив усекается. Если значение параметра, наоборот, больше, то массив дополняется дополнительными элементами, которые имеют значение по умолчанию. Причем первый параметр передается по ссылке:
Копирование массива
Метод Copy копирует часть одного массива в другой:
В данном случае копируем 3 элемента из массива people начиная c индекса 1 и вставляем их в массив employees начиная с индекса 0.
Сортировка массива
Отсортируем массив с помощью метода Sort() :
Этот метод имеет много перегрузок. Например, одна из версий позволяет отсортировать только часть массива:
How to copy part of an array to another array in C#?
Now if I give the start index and end index of the array a it should get copied to another array.
Like if I give start index as 1 and end index as 3, the elements 2, 3, 4 should get copied in the new array.
6 Answers 6
- a = source array
- 1 = start index in source array
- b = destination array
- 0 = start index in destination array
- 3 = elements to copy
See this question. LINQ Take() and Skip() are the most popular answers, as well as Array.CopyTo().
Where Array is class having method Copy, which copies the element of a array to b array.
While copying from one array to another array, you have to provide same data type to another array of which you are copying.
Note: I found this question looking for one of the steps in the answer to how to resize an existing array.
So I thought I would add that information here, in case anyone else was searching for how to do a ranged copy as a partial answer to the question of resizing an array.
For anyone else finding this question looking for the same thing I was, it is very simple:
where T is the type, i.e. where arrayVariable is declared:
That method handles null checks, as well as newSize==oldSize having no effect, and of course silently handles the case where one of the arrays is longer than the other.
Создать копию массива в C#
В этом посте мы обсудим, как создать копию массива в C#.
1. Использование Array.CopyTo метод
Идея состоит в том, чтобы создать новый массив той же длины, что и исходный массив, и вызвать метод Array.CopyTo() метод для копирования всех элементов из исходного массива в целевой массив, начиная с указанного индекса целевого массива.
The Array.Copy() метод также может работать здесь. В следующем примере кода показано, как его можно использовать для копирования указанного количества элементов из исходного массива в целевой массив.
The Array.Copy() метод перегружен для копирования диапазона элементов массива, начиная с указанного исходного индекса, в другой массив, начиная с указанного целевого индекса.
2. Использование LINQ
LINQ’s Take() метод часто используется для получения первых нескольких элементов из последовательности. Чтобы создать копию массива, вы можете передать количество элементов в исходном массиве в Take() метод и получить представление массива возвращаемой последовательности, используя ToArray() метод.
std::copy, std::copy_if
Копирует элементы в диапазоне, определенном [first, last) , в другой диапазон, начинающийся с d_first .
Parameters
first, last | — | диапазон элементов для копирования |
d_first | — | начало диапазона назначения. |
policy | — | политика выполнения для использования. См. Политику выполнения для деталей. |
pred | — | унарный предикат возвращает true для требуемых элементов. |
Выражение pred(v) должно быть преобразовано в bool для каждого аргумента v типа (возможно, const) VT , где VT — это тип значения InputIt , независимо от категории значения , и не должно изменять v . Таким образом, тип параметра VT& не допускается, как и VT , если только для VT перемещение не эквивалентно копии (начиная с C ++ 11).
Return value
Выведите итератор на элемент,находящийся в диапазоне назначения,мимо последнего скопированного элемента.
Complexity
Для перегрузок с ExecutionPolicy может быть потеря производительности, если ForwardIt1 имеет тип значения не MoveConstructible .
Exceptions
Перегрузки с параметром шаблона с именем ExecutionPolicy сообщают об ошибках следующим образом:
- Если выполнение функции, вызванной как часть алгоритма, вызывает исключение, и ExecutionPolicy является одной из стандартных политик , вызывается std::terminate . Для любого другого ExecutionPolicy поведение определяется реализацией.
- Если алгоритму не удается выделить память, std::bad_alloc .
Notes
На практике реализации std::copy избегают множественных назначений и используют функции массового копирования, такие как std::memmove , если тип значения TriviallyCopyable и типы итераторов удовлетворяют LegacyContiguousIterator .
При копировании перекрывающихся диапазонов, std::copy подходит для копирования влево (начало диапазона назначения выходит за пределы исходного диапазона), а std::copy_backward подходит для копирования вправо (конец диапазона назначения находится вне источника ассортимент).
Possible implementation
Example
Следующий код использует copy для копирования содержимого одного vector в другой и для отображения результирующего vector :