Общая идея Guffa верна - ваша структура данных должна отражать то, что вы на самом деле хотите, а именно список строк , а не одну строку. Понятие «последние 50 строк» довольно очевидно связано с коллекцией, а не с одной строкой, даже если вы изначально читали ее таким образом.
Однако я бы предложил использовать LinkedList<T>
вместо List<T>
: каждый раз, когда вы удаляете первый элемент List<T>
, все остальное должно перемешиваться. List<T>
отлично подходит для предоставления произвольного доступа и не слишком плох для добавления в конец, но отстой для удаления с начала. LinkedList<T>
отлично подходит для предоставления вам доступа к итератору, добавления к / удаления с начала и добавления к / удаления с конца. Это лучше подходит. (Если бы вы действительно хотели поехать в город, вы могли бы даже написать свой собственный тип кольцевого буфера фиксированного размера, который инкапсулировал бы логику для вас; это дало бы лучшее из обоих миров в ситуации, когда вы не хотите иметь возможность расширить за определенный размер.)
Что касается ваших комментариев к ответу Гуффы: довольно распространено преобразовывать ввод в форму, более подходящую для обработки, а затем преобразовывать его обратно в исходный формат для вывода. Причина, по которой вы делаете это, как раз и есть «более подходящий» бит. Вам не нужно анализировать строку на наличие разрывов строк как часть действия «обновление словаря», IMO. В частности, это звучит так, как будто вы в настоящее время вводите идею "строк", где исходный текст просто читается как строки. Вы фактически создаете свой собственный класс «collection», подкрепленный строкой, разделяя строки с помощью переносов строк. Это неэффективно, подвержено ошибкам и намного сложнее в управлении, чем использование встроенных коллекций. При желании легко выполнить преобразование в строку с разделителем-разделителем в конце, но, похоже, вы делаете это слишком рано.