Как и в заголовке. Я знаю, что это, вероятно, объединяет 2 подсписок до и после удаленных элементов, но как этот метод ведет себя при удалении элементов LAST? Другими словами: делает ли он каким-то образом копию всех элементов, расположенных перед удалением индекса? Мне просто интересно, как использовать RemoveRange в гигантском списке (скажем, 5000 элементов), чтобы удалить f.e. только последние 2 из них.Как работает метод RemoveRange() в списке <>?
Если это делает копию, есть ли способ изменить некоторую внутреннюю переменную, которая задает размер списка (и обрабатывать остальную часть выделенных элементов как мусор)?
Мне удалось найти информацию о том, что это алгоритм сложности O (n), но я не уверен, что «n» в этом случае является размером списка или количеством элементов для удаления.
Будем рады любому намеку.
http://msdn.microsoft.com/en-gb/library/y33yd2b5.aspx «Этот метод является операцией O (n), где n является Count». «Элементы удалены, и все элементы, следующие за ними в списке, имеют индексы, уменьшенные по счету». http://geekswithblogs.net/BlackRabbitCoder/archive/2012/02/23/c.net-little-wondersndashthe-listlttgt-range-methods.aspx "имейте в виду, что это заставляет остальную часть списка перемещаться вниз до заполнить пробел, который может быть нетривиальным.Тем не менее, это не потребует перераспределения списка, потому что размер потенциально сокращается, а не растет ». –
Приходите, вы считаете, что счет - номер, который нужно удалить. Удаление 2 из списка из десяти займет столько же времени, сколько удаляя 2 из миллиона.Если вы щелкнете по счету в документации, он свяжет счетчик списков. – Paparazzi
@Blam Это неверно, если вы не удаляете его из конца списка. Если вы удаляете из начала списка то это разница между сдвигом 8 предметов в памяти на два элемента или смещением 1999,998 элементов в памяти на два элемента. Эти два не будут равны. – Servy