Какова цель для l oop при копировании массива? - PullRequest
0 голосов
/ 28 марта 2020

Приведенный ниже код работает, но я не понимаю, почему для копирования массива необходимо использовать для l oop. Есть ли другой способ скопировать массив без использования для l oop? Этот код был взят отсюда:

https://starboundsoftware.com/books/c-sharp/try-it-out/copying-an-array

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CopyingAnArray
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create the initial array.
            int[] numbers = new int[] { 4, 5, 2, 3, 1, 0, 8, 9, 7, 6 };

            // Note that while you can do this, this doesn't make a
            // copy. They'll both be the exact same array. Modifying
            // one will affect the other. For more about this, see
            // the chapter on value and reference types.
            // int[] copy = numbers;

            // Copy the values from one array to a copy.
            int[] copy = new int[numbers.Length];
            for (int index = 0; index < numbers.Length; index++)
            {
                copy[index] = numbers[index];
            }

            // Print out the original array.
            for (int index = 0; index < numbers.Length; index++)
            {
                Console.Write(numbers[index] + " ");
            }
            Console.WriteLine();

            // Print out the copy.
            for (int index = 0; index < copy.Length; index++)
            {
                Console.Write(copy[index] + " ");
            }
            Console.WriteLine();
            Console.WriteLine();

            Console.ReadKey();
        }
    }
}
    }
}

Ответы [ 3 ]

3 голосов
/ 28 марта 2020

Только первый l oop копирует содержимое number в новый массив. Два других цикла предназначены для печати содержимого массивов numbers и copy соответственно.

Вам не нужно использовать для l oop для клонирования массива. Есть альтернативы для достижения того же. 3 из них приходят мне на ум, где первый кажется лучшим, так как вы можете иметь объявление и инициализацию в одной строке.

    int[] numbers = new int[] { 4, 5, 2, 3, 1, 0, 8, 9, 7, 6 };

    // Create a clone using LinQ:
    // as @BrettCaswell pointed out,
    // Select() is not required since we are not modifying, manipulating or filtering the elements.
    // .ToArray() would do.
    // int[] copyOfNumbersWithLinQ = numbers.Select(a => a).ToArray();
    int[] copyOfNumbersWithLinQ = numbers.ToArray();

    // Copy using Array.Copy():
    int[] copyOfNumbersWithArrayCopy = new int[numbers.Length];
    Array.Copy(numbers, copyOfNumbersWithArrayCopy, numbers.Length);

    // Copy using numbers.CopyTo()
    int[] copyOfNumbersWithCopyTo = new int[numbers.Length];
    numbers.CopyTo(copyOfNumbersWithCopyTo, 0);
0 голосов
/ 28 марта 2020

Array.Copy () также может использоваться для копирования массива

0 голосов
/ 28 марта 2020

Фактически, если поместить его в один l oop, это изменит порядок печати. ​​

В представленном вами примере сначала распечатывается исходный массив, затем печатается копия.

Если вы поместите все в один l oop, вы напечатаете 1 номер исходного массива, 1 копию, другой номер исходного массива, еще один номер копии и т. Д. c .. .

Просто попробуйте изменить код и убедитесь сами, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...