Переупорядочение коллекции C # - PullRequest
5 голосов
/ 30 марта 2010

У меня есть проблема, на которую я не могу найти ответ путем поиска (либо это, либо я ищу совершенно неправильную вещь!). У меня есть список элементов с именем «Top 10» в элементе sortedlist, который заполняется из моей БД (SortedList, где int - это позиция, а string - это элемент). Я хочу иметь возможность перемещать элементы вверх и вниз по порядку списка одним нажатием кнопки, а затем сохранить новый порядок обратно в БД. Я в порядке с частью БД, это просто переупорядочение, с которым я действительно борюсь - это сортированный список, правильный выбор для этого?

Большое спасибо за любые советы.

Ответы [ 4 ]

6 голосов
/ 30 марта 2010

SortedList предназначен для поддержания порядка в вашем SortedList при добавлении или удалении элементов из него.

Вы должны создать собственный список своих объектов, а затем отсортировать их по свойству.

Так что, если ваша запись в вашей базе данных была такой, вы могли бы поместить ее в объект, добавить ее в список и затем отсортировать, используя лямбду, по любому критерию, который вам нравится

public class LeaguePosition
{
    public int Position { get; set; }
    public string Team { get; set; }
}


List<LeaguePosition> League = new List<LeaguePosition>();
League.Add(new LeaguePosition() { Position = 2, Team = "Wolves" });
League.Add(new LeaguePosition() { Position = 3, Team = "Spurs" });
League.Add(new LeaguePosition() { Position = 1, Team = "Villa" });

League.Sort((teamA, teamB) => teamA.Position.CompareTo(teamB.Position));

Затем вы также можете использовать RemoveAt () и Insert (), чтобы переместить элементы на пользовательские позиции в списке.

LeaguePosition teamToMove = League[1];
League.RemoveAt(1);
League.Insert(2, teamToMove);
3 голосов
/ 30 марта 2010

Нет, SortedList будет сохранять вещи в отсортированном (буквенно-цифровом) порядке. Вам нужен простой список, который позволит вам вытаскивать вещи и вставлять их в разные позиции.

0 голосов
/ 30 марта 2010

Я бы сказал, что SortedList - это именно то, что вам нужно. Когда вы получаете данные из базы данных, вы хотите сохранить их в порядке, основанном на поле позиции (что я могу сказать из вашего ОП). Я предполагаю, что у вас будет класс, содержащий данные, которые вы возвращаете из БД. Чтобы сохранить данные в правильном порядке, вам нужно реализовать интерфейс IComparable в своем пользовательском классе, чтобы SortedList знал, какие значения использовать для поддержания порядка в списке. Таким образом, при добавлении / удалении элементов вы сохраняете их в правильном порядке.

Вы можете использовать универсальный List <>, но тогда вам придется написать весь код, чтобы отсортировать свои элементы самостоятельно, SortedList уже делает это, так зачем изобретать колесо?

Посмотрите эту страницу для получения дополнительной информации:

http://www.dotnetspider.com/resources/4679-Applying-custom-sort-SortedList.aspx

0 голосов
/ 30 марта 2010

SortedList заставит каждый элемент отслеживать свою позицию в списке относительно других элементов (ваша позиция int). Это должно быть обязанностью Коллекции, поэтому вы должны использовать какую-то Коллекцию, которая позволит вам перемещать вещи вверх / вниз / вокруг без необходимости ручной корректировки каждого элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...