simonradev

MyList

Dec 16th, 2016
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.85 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace GenericListTest
  8. {
  9.     class GenericListTest
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             //пробвай методите -> .AddElement            - добавя елемент на първото свободно място
  14.             //                    .GetElementByValue     - връща елемента ако отговаря на стойността
  15.             //                    .GetElementByIndex     - връща елемента на зададения индекс
  16.             //                    .DeleteElementByIndex  - изтрива елемента на дадения индекс
  17.             //                    .AddElementAtIndex     - добавя елемент на индекс
  18.             //                    .ClearTheList          - изчиства листа и му връща оригиналния размер
  19.             //                     .ExtractElements      - връща масив от елементите който си задал
  20.  
  21.             // в скобите задаваш оригиналния елемент на листа ако не зададеш автоматично се заделят 12 места
  22.             GenericList<string> test = new GenericList<string>(3);
  23.  
  24.             test.AddElementAtIndex("Banam", 0);
  25.             test.AddElementAtIndex("kenguru", 0);
  26.             test.AddElementAtIndex("sega sym purvi", 1);
  27.             test.AddElementAtIndex("iskam da sum posleden be", 3);
  28.             test.AddElement("Ne az sym posleden");
  29.  
  30.             test.DeleteElementByIndex(5);
  31.  
  32.             foreach (string sentence in test.ExtractElements)
  33.             {
  34.                 Console.WriteLine(sentence);
  35.             }
  36.         }
  37.     }
  38.  
  39.     class GenericList<TElement>
  40.     {
  41.         private TElement[] allElements;
  42.         private int sizeOfList;
  43.         private int originalSizeOfTheList;
  44.         private int currentIndex;
  45.  
  46.         public GenericList()
  47.             : this (12)
  48.         {
  49.  
  50.         }
  51.  
  52.         public GenericList(int sizeOfList)
  53.         {
  54.             this.originalSizeOfTheList = sizeOfList;
  55.             this.sizeOfList = sizeOfList;
  56.             this.currentIndex = 0;
  57.             this.allElements = new TElement[sizeOfList];
  58.         }
  59.  
  60.         public TElement[] ExtractElements { get { return this.allElements; } }
  61.  
  62.         public int LenghtOfList { get { return this.allElements.Length; } }
  63.  
  64.         public void AddElement(TElement element)
  65.         {
  66.             if (currentIndex == allElements.Length)
  67.             {
  68.                 TElement[] arrayHolder = new TElement[sizeOfList];
  69.  
  70.                 Array.Copy(allElements, arrayHolder, allElements.Length);
  71.  
  72.                 sizeOfList *= 2;
  73.                 allElements = null;
  74.                 allElements = new TElement[sizeOfList];
  75.  
  76.                 Array.Copy(arrayHolder, allElements, arrayHolder.Length);
  77.             }
  78.  
  79.             allElements[currentIndex] = element;
  80.             currentIndex++;
  81.         }
  82.  
  83.         public TElement GetElementByValue(TElement elementSearched)
  84.         {
  85.             TElement elementToReturn = default(TElement);
  86.             bool foundAnElement = false;
  87.             for (int i = 0; i < allElements.Length; i++)
  88.             {
  89.                 if (allElements[i] != null && allElements[i].Equals(elementSearched))
  90.                 {
  91.                     elementToReturn = elementSearched;
  92.                     foundAnElement = true;
  93.                 }
  94.             }
  95.  
  96.             if (foundAnElement)
  97.             {
  98.                 return elementToReturn;
  99.             }
  100.             else
  101.             {
  102.                 throw new InvalidOperationException("No such element exists!!!");
  103.             }
  104.         }
  105.  
  106.         public TElement GetElementByIndex(int index)
  107.         {
  108.             if (index >= allElements.Length || index < 0)
  109.             {
  110.                 throw new IndexOutOfRangeException("Invalid index entered!!!");
  111.             }
  112.  
  113.             return allElements[index];
  114.         }
  115.  
  116.         public void DeleteElementByIndex(int index)
  117.         {
  118.             if (index >= allElements.Length || index < 0)
  119.             {
  120.                 throw new IndexOutOfRangeException("Invalid index entered!!!");
  121.             }
  122.  
  123.             allElements[index] = default(TElement);
  124.  
  125.             for (int currIndex = index; currIndex < (allElements.Length - 1); currIndex++)
  126.             {
  127.                 allElements[currIndex] = allElements[currIndex + 1];
  128.             }
  129.  
  130.             currentIndex--;
  131.             allElements[currentIndex] = default(TElement);
  132.         }
  133.  
  134.         public void AddElementAtIndex(TElement element, int index)
  135.         {
  136.             if (index > allElements.Length || index < 0)
  137.             {
  138.                 throw new IndexOutOfRangeException("Invalid index entered!!!");
  139.             }
  140.  
  141.             if (currentIndex == allElements.Length || index == allElements.Length)
  142.             {
  143.                 TElement[] arrayHolder = new TElement[sizeOfList];
  144.  
  145.                 Array.Copy(allElements, arrayHolder, allElements.Length);
  146.  
  147.                 sizeOfList *= 2;
  148.                 allElements = null;
  149.                 allElements = new TElement[sizeOfList];
  150.  
  151.                 Array.Copy(arrayHolder, allElements, arrayHolder.Length);
  152.             }
  153.  
  154.             for (int i = (allElements.Length - 1); i > index; i--)
  155.             {
  156.                 allElements[i] = allElements[i - 1];
  157.             }
  158.  
  159.             allElements[index] = default(TElement);
  160.             allElements[index] = element;
  161.             currentIndex++;
  162.         }
  163.        
  164.         public void ClearTheList()
  165.         {
  166.             allElements = null;
  167.             allElements = new TElement[originalSizeOfTheList];
  168.         }
  169.     }
  170. }
Advertisement
Add Comment
Please, Sign In to add comment