самый быстрый способ удалить элемент в списке - PullRequest
1 голос
/ 29 августа 2009

У меня есть список объектов User, и я должен удалить ОДИН элемент из списка с определенным UserID.

Этот метод должен быть максимально быстрым, в настоящее время я зацикливаюсь на каждом элементе и проверяю, соответствует ли идентификатор идентификатору пользователя, если нет, то я добавляю строку в мою коллекцию FilterList.

List allItems = GetItems();

for(int x = 0; x < allItems.Count; x++)
{
    if(specialUserID == allItems[x].ID)
        continue;
    else
        filteredItems.Add( allItems[x] );
}

Ответы [ 11 ]

0 голосов
/ 29 августа 2009

Вот код, который эффективен, если у вас есть сотни или тысячи элементов:

List allItems = GetItems();
//Choose the correct loop here

if((x % 5) == 0 && (X >= 5))
{
     for(int x = 0; x < allItems.Count; x = x + 5)
     {
         if(specialUserID != allItems[x].ID)
             filteredItems.Add( allItems[x] );
         if(specialUserID != allItems[x+1].ID)
             filteredItems.Add( allItems[x+1] );
         if(specialUserID != allItems[x+2].ID)
             filteredItems.Add( allItems[x+2] );
         if(specialUserID != allItems[x+3].ID)
             filteredItems.Add( allItems[x+3] );
         if(specialUserID != allItems[x+4].ID)
             filteredItems.Add( allItems[x+4] );
      }
 }

Начните тестирование, если размер цикла делится на наибольшее число на наименьшее число. если вы хотите 10 операторов if в цикле, то проверьте, что размер списка больше десяти и делится на десять, а затем уменьшите его. Например, если у вас есть 99 элементов --- вы можете использовать 9 операторов if в цикле. Цикл будет повторяться 11 раз вместо 99 раз

операторы if, дешевые и быстрые

...