11

IList<T>オブジェクトから複数のアイテムを削除する最も効率的な方法は何ですか? IEnumerable<T>元のリストと同じ出現順序で、削除したいすべてのアイテムがあるとします。

私が念頭に置いている唯一の方法は次のとおりです。

IList<T> items;
IEnumerable<T> itemsToDelete;
...

foreach (var x in itemsToDelete)
{
    items.Remove(x);
}

Removeしかし、メソッドが呼び出されるたびに最初からリストを調べなければならないため、効率的ではないと思います。

4

3 に答える 3

1

たぶんこれが役立ちます。同じタイプの他のアイデアを含めることができます。

IList<T> items;

IEnumerable<T> itemsToDelete;
...
{
   if(items.Equals(itemsToDelete)) //Equal lists?
     {
      items.Clear(); 
      return true;
     }


   if(  (double) items.Count/itemsToDelete.Count < 1){
      /* It is faster to iterate the small list first. */ 
              foreach (var x in items)
              {
                if(itemsToDelete.Contains(x)){/**/} 

              }
    }
   else{
           foreach (var x in itemsToDelete)
              {
               items.Remove(x);
              }
   }
}
于 2013-08-02T23:55:18.390 に答える