сортировка элементов c # - PullRequest
       15

сортировка элементов c #

1 голос
/ 26 января 2010

У меня проблема с попыткой отсортировать Dictionary<int,Elem> / SortedList<int,Elem> элементов.

У меня есть список N элементов, которые должны появляться в списке X раз, но если элемент находится в индексе i, он не может появиться снова в i - 1 или i + 1. Я также должен соблюдать ограничения списка (элемент N стоит перед элементом 1, а элемент 1 - рядом с элементом N).

У меня есть две возможные отправные точки:

  1. Список элементов со свойством Times, в котором указано, сколько раз элемент должен появляться в результирующем списке.

    Пример ввода:

    List<elem> elements = new List<elem>(){new Elem("star", 3), new Elem("square", 2), new Elem("circle", 3)}; 
    //Elem construct take element name, and number of times on result list
    
  2. Список, содержащий все элементы, которые я хочу отсортировать, очевидно, в несортированном виде.

    List<elem> elements = new List<elem>(){new Elem("star"),new Elem("star"),new Elem("star"),new Elem("circle"),("circle"),("circle"),new Elem("sqare"),new Elem("sqare")}; 
    

Ожидаемый результат:

star circle star sqare circle sqare star circle

// or any other combination in which any element is not preceded by itself

Более эффективные алгоритмы сортировки производительности приветствуются, но не являются обязательными, поскольку это будет происходить нечасто.

Я использую C # 4.0 и .Net Framework 4.0.

Ответы [ 3 ]

1 голос
/ 26 января 2010

Вы можете сделать это с помощью очень простого алгоритма обратного отслеживания (похожего на стандартное решение головоломки восемь королев * . Дайте мне знать, если вам нужны подробности.

0 голосов
/ 26 января 2010

Реализация пользовательского класса ключей для SortedList. например,

class MyKey : IComparer
{
    int count;
    int index; // Or maybe something else
    ...
}

Добавление в ваш SortedList приведет к увеличению переменной count в этих значениях пользовательского ключа, если он существует. Или добавление нового ключа со счетом 1, если это не так.

0 голосов
/ 26 января 2010

У меня нет времени, чтобы проверить это, так как в данный момент у меня нет доступа к visual studio, но я не могу начать.

Во-первых, id рекомендует взять все объекты и отсортировать их по трем различным спискам. (это происходит из-за того, что вы будете использовать список, отредактируйте как обязательный,

List<string> circle = new List<string>();
List<string> square = new List<string>();
List<string> star = new List<string>();
foreach(string item in yourList)
{
    switch(item)
    {
        case "circle":
            circle.Add(item);
            break;
        case "star":
            star.Add(item);
            break;
        case "square":
            square.Add(item);
            break;
    }
}
//then you would move to sorting them into one list, which would be
List<string> finnished = new List<string>();
int count = 0;
while(count != square.Count -1)
{
    finished.Add(square[count]);
    finished.Add(star[count]);
    finished.Add(circle[count]);
    count++
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...