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

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

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

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

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

textual
Листинг программы
  1. using System;
  2. using System.Linq;
  3.  
  4. namespace ConsoleApplication196
  5. {
  6.     internal class Program
  7.     {
  8.         private static void Main(string[] args)
  9.         {
  10.             var arr = new ExpandingArray<string>();
  11.  
  12.             arr[1] = "bloom";
  13.             arr[3] = "flame";
  14.  
  15.             //
  16.             for (int i = 0; i < arr.Length; i++)
  17.                 Console.WriteLine("{0}: {1}", i, arr[i]);
  18.  
  19.             Console.ReadLine();
  20.         }
  21.     }
  22.  
  23.     public class ExpandingArray<T>
  24.     {
  25.         private T[] items = new T[0];
  26.  
  27.         public int Length { get { return items.Length; } }
  28.  
  29.         public T this[int index]
  30.         {
  31.             get
  32.             {
  33.                 if (index >= items.Length)
  34.                     Expand(index + 1);
  35.                 return items[index];
  36.             }
  37.  
  38.             set
  39.             {
  40.                 if (index >= items.Length)
  41.                     Expand(index + 1);
  42.                 items[index] = value;
  43.             }
  44.         }
  45.  
  46.         void Expand(int newLength)
  47.         {
  48.             Array.Resize(ref items, newLength);
  49.         }
  50.     }
  51. }

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


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

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

6   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы