Обобщенный класс. Расширить одномерный массив при обращении к несуществующему элементу - C#

Узнай цену своей работы

Формулировка задачи:

Подскажите как выполнить такую задачу? "Создать обобщенный класс для представления одномерного массива, который автоматически расширяется, когда пользователь обращается к несуществующему элементу. Например, если создан пустой массив a, первое обращение (для чтения или записи) к элементу a [n] обеспечит расширение массива так, чтобы он содержал n + 1 элемент с индексами от 0 до n-го включительно. Если определенные элементы уже существовали, они сохраняются и массив дополняется новыми элементами. Если элемент с индексом уже существует, осуществляется обычное обращение." Или хотя бы подскажите можно ли как-то получить значение [index], чтобы использовать его в другом методе
public class ArrayContainer<T>
    {
        private T[] arr;//закрите поле - "звичайний" масив (список);
        public ArrayContainer(params T[] arr)//властивості (для читання)
        {  
            this.arr = new T[arr.Length];
            Array.Copy(arr, this.arr, arr.Length);
        }
        public ArrayContainer()
        {
            this.arr = new T[arr.Length];
        }
        public T this[int index]//індексатор;
        {
            set { arr[index] = value; } //как получить значение этого index, чтобы воспользоваться им в методе  public ArrayContainer(params T[] arr) ?
            get { return arr[index]; }
        }
...... ......

Решение задачи: «Обобщенный класс. Расширить одномерный массив при обращении к несуществующему элементу»

textual
Листинг программы
using System;
using System.Linq;
 
namespace ConsoleApplication196
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var arr = new ExpandingArray<string>();
 
            arr[1] = "bloom";
            arr[3] = "flame";
 
            //
            for (int i = 0; i < arr.Length; i++)
                Console.WriteLine("{0}: {1}", i, arr[i]);
 
            Console.ReadLine();
        }
    }
 
    public class ExpandingArray<T>
    {
        private T[] items = new T[0];
 
        public int Length { get { return items.Length; } }
 
        public T this[int index]
        {
            get
            {
                if (index >= items.Length)
                    Expand(index + 1);
                return items[index];
            }
 
            set
            {
                if (index >= items.Length)
                    Expand(index + 1);
                items[index] = value;
            }
        }
 
        void Expand(int newLength)
        {
            Array.Resize(ref items, newLength);
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы