У меня есть коллекция списков, которая заполняется в определенном порядке (требуется, чтобы этот порядок не мог быть изменен). Этот список содержит объекты типа объекта.
После первоначального заполнения списка мне нужно вставить еще несколько объектов, которые поступают из другого источника данных. Эти объекты необходимо вставить в определенную позицию, чтобы сортировка была правильной.
Например, если в начальном списке есть следующие элементы
- AAA
- AAB
- AAC
- ACC
- ADA
После начального заполнения я хочу вставить элемент "ABB", его нужно вставить между 3 и 4.
На данный момент у меня есть следующий метод нахождения правильной позиции для новых элементов.
private static int FindPositionForArticle(string word)
{
string key = word.ToLower();
for (int i = word.Length; i >= 0; i--)
{
if(i < word.Length)
key = key.Remove(i, 1);
int pos = 0;
int insertPos = 0;
foreach(ArticleEntity article in list)
{
if(article.Text.ToLower().StartsWith(key))
insertPos = pos;
else if (!article.Text.ToLower().StartsWith(key) && insertPos > 0)
return insertPos++;
pos++;
}
}
return 0;
}
Цель идеи этого метода:
Возьмите «слово», которое нужно вставить, и попытайтесь найти положение элемента с тем же именем, что и «слово»
Если ничего не найдено, удалите последний символ из слова и повторите поиск.
Повторять удаление последних символов, пока не будет найдена лучшая позиция.
К сожалению, в моих методах есть ошибки (реализованы неправильно). В настоящее время мои методы предполагают, что наилучшая позиция будет 0, что совершенно неверно.
Если вы хотите поиграть с моим примером кода, вы можете скачать его по адресу:
http://dl.getdropbox.com/u/204110/FindPosition.cs.txt
Заранее спасибо.