Как оптимизировать удаление элемента из пользовательской коллекции? - C#
Формулировка задачи:
Здравствуйте. Я писал пользовательскую коллекцию и запутался в реализации удаления элемента из нее.
Написал какую-то глупость, которая медленно работает. Помогите оптимизировать. Код:
public bool Remove(string PageLink)
{
if (array.Length == 1 && array[0].PageLink == PageLink)
{
array = new CurrentAnime[0];
return true;
}
if (array.Length > 1)
{
CurrentAnime[] newArray = new CurrentAnime[array.Length - 1];
int removeIndex = -1;
for (int i = 0; i < array.Length; i++)
{
if (array[i].PageLink == PageLink) removeIndex = i;
}
if (removeIndex == -1) return false;
for (int i = 0; i < array.Length; i++)
{
if (i < removeIndex) newArray[i] = array[i]; else if (i > removeIndex) newArray[i - 1] = array[i];
}
array = newArray;
return true;
}
else return false;
}Решение задачи: «Как оптимизировать удаление элемента из пользовательской коллекции?»
textual
Листинг программы
public Int32 Length = 1;
//Хранит кол-во заполненных ячеек и все работает с условием что длинна при инициализации 1(array).
public bool Remove(CurrentAnime obj){
for (int i = 0; i < array.Length; i++)
if ( array[i].PageLink == obj.PageLink ) {
for (int n = i; n < array.Length-1; n++) array[n] = array[n+1];
array[Length-1] = null;
Length--;
return true;
}
return false;
}
public void Add(CurrentAnime obj){
CurrentAnime[] newArray;
if ( array.Length != Length ) { array[Length] = obj; return; }
newArray = new CurrentAnime[ array.Length*2 ];
array.CopyTo(newArray,0);
newArray[array.Length] = obj;
Length++;
array = newArray;
}