Сортировка списка в С# на основе некоторых условийC#

Место общения программистов C#
Ответить
Anonymous
 Сортировка списка в С# на основе некоторых условий

Сообщение Anonymous »

Я хочу наиболее эффективно отсортировать записи в заданном списке в столбце «Запись». Ниже приведен пример того, как выглядят мои записи i.

Код: Выделить всё

#No Detail                                 Entry          Number          Rate
1   Carpool at 5$                          C              1               5
Carpool at 5$                          H              2               5

2   Played Cricket at 2$                   X              1               2
Played Cricket at 2$                   O              2               2

3   Done something at 4$                  ""              0               4

4   Done something else at 9$              M              1               9

5   Watched movie at 6$                    B              1               6
Watched movie at 6$                    Z              2               6
Некоторые пояснения к данным:
  • Ни один столбец не доступен в списке. Я упомянул здесь только для того, чтобы подробнее рассказать о записях.
  • 1,2,5 — это специальные клубные записи, и их следует сортировать вместе по записям, для которых в столбце номера установлено значение 1. Эти записи имеют специализацию, которая их скорость и описание будут одинаковыми, а номер будет 1 и 2.
  • Возможно, что могут быть некоторые записи с пустыми значениями записей, для таких записей номер будет установлен на 0. Например, 3
  • Возможно, что некоторые записи имеют одно значение записи и не будут иметь пары, а столбец номера для таких записей будет установлен на 1, и их не будет. это любая запись в списке, которая имеет одинаковое описание и рейтинг, а в столбце «Номер» установлено значение 2. Например, #4.
  • При сортировке клубных записей в столбце «Запись» учитывайте только запись с номером, установленным на 1, и другая запись должна идти рядом.
Я хочу отсортировать столбец «Запись» по возрастанию или убыванию в соответствии с указанными выше правилами.
Мое решение:

Код: Выделить всё

using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1
{
internal class Data
{
public string Detail { get; set; }
public string Entry { get; set; }
public int Number { get; set; }
public int Rate { get; set; }
}

internal class Program
{
private static void Main(string[] args)
{
List entries = new List();

// Clubbed entry...While sorting only consider entry with Number set to 1.  They will have same rate and Detail.
entries.Add(new Data() { Detail = "Carpool at 5$", Entry = "C", Number = 1, Rate = 5 });
entries.Add(new Data() { Detail = "Carpool at 5$", Entry = "H", Number = 2, Rate = 5 });

// Clubbed entry
entries.Add(new Data() { Detail = "Played Cricket at 2$", Entry = "X", Number = 1, Rate = 2 });
entries.Add(new Data() { Detail = "Played Cricket at 2$", Entry = "O", Number = 2, Rate = 2 });

// entry which have empty Entry value such entries will have Number set to 0
entries.Add(new Data() { Detail = "Done something at 4$", Entry = "", Number = 0, Rate = 4 });

// entry which will not have an pair and Number column for such entries would be set to 1 and
// there wouldn't be any entry in list which have same detail and rate with Number column set to 2
entries.Add(new Data() { Detail = "Done something else at 9$", Entry = "M", Number = 1, Rate = 9 });

// Clubbed entry
entries.Add(new Data() { Detail = "Watched movie at 6$", Entry = "B", Number = 1, Rate = 6 });
entries.Add(new Data() { Detail = "Watched movie at 6$", Entry = "Z", Number = 2, Rate = 6 });

// Sorting on Entry Column
var sortedList = entries.GroupBy(x => x.Detail).OrderBy(x => x.FirstOrDefault(y => y.Number  x).ToList();

}
}
}
Выход:

Код: Выделить всё

Detail                                 Entry          Number          Rate
Done something at 4$                  ""              0               4

Watched movie at 6$                    B              1               6
Watched movie at 6$                    Z              2               6

Carpool at 5$                          C              1               5
Carpool at 5$                          H              2               5

Done something else at 9$              M              1               9

Played Cricket at 2$                   X              1               2
Played Cricket at 2$                   O              2               2
Вопрос:
  • Мое решение не учитывает оценку и группирует только на основе детализации , можно
    его изменить?
  • Можно ли это сделать с помощью IComparer, поскольку в остальной части моего кода сортировка выполнялась с помощью IComparer?


Подробнее здесь: https://stackoverflow.com/questions/525 ... conditions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»