2015-03-27 3 views
0

Я столкнулся с некоторой загадкой, и я не мог описать то, что имею в виду, задавая вопросы о google и StackOverflow, поэтому, пожалуйста, простите меня, если заголовок запутан!Универсальная привязка свойств для сортировки объектов

Итак, моя идея состоит в том, чтобы иметь класс под названием «Сортировка», который содержит несколько различных алгоритмов сортировки в виде методов ... Я разработал способ сортировки значений на основе того, являются ли они строками, int, double, и т. д., не переписывая новые типы для каждого, но я изо всех сил стараюсь выполнить сортировку, потому что:

Список объектов, которые я хочу сортировать, с именем «Stock» содержит ALOT различных свойств, которые программа должна быть способный сортировать такие данные, как дата, день и т. д. То, к чему я стремлюсь, - это не переписывать сортировки для каждого из свойств, а вместо этого указывать свойство Sort, которое нужно посмотреть для каждого объекта в списке ... Если это имеет смысл?

Heres мою идею «псевдо»:

Stock[] stocksList; 
Sort sort = new Sort(); 

stocksList = sort.Sort(sort.SortType.Bubble, stocksList, property); 

Где SortType.Bubble это значение перечислителя, чтобы определить тип рода для выполнения, а свойство является имя свойства для использования в каждом элементе stocksList ...

Тогда внутри метода «sort.Sort», я хочу, чтобы иметь возможность сказать:

for (int i = 0; i < stocksList.Length; i++) 
{ 
    if (stocksList[i].property > stocksList[i + 1].property); 
    { 
     // Swap stocksList objects. 
    } 
} 

Из того, что я знаю, это не возможно, но я надеюсь, кто-то может доказать, что я неправ?

Спасибо, Лиам

EDIT: Я знаю, что можно просто передать как массив свойств для анализа, а также список объектов ... Но это означало бы, поменяв значения в обоих массивах для каждый из которых будет в основном снизить эффективность алгоритмов.

ответ

0

Вы делаете этот способ сложным. Используйте метод linq orderby и передайте ключ.

https://msdn.microsoft.com/en-us/library/vstudio/bb534966%28v=vs.100%29.aspx

SomeCollection.OrderBy((x) => x.someproperty); 

Если вам действительно нужно больше контроля, реализации IComparer, где вам это нужно, и вы можете контролировать то, как сравнения сделаны. Есть перегрузка orderBy, который берет один.

+0

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

+0

Затем используйте те же концепции, чтобы получить гибкую обработку свойств, и Icomparer как механизм для гибких сравнений. Затем просто выполните сам сортировку. – Tim

+0

Вам необходимо изменить свои объекты для реализации IComparable: https://msdn.microsoft.com/en-us/library/4d7sx9hd%28v=vs.110%29.aspx –

Смежные вопросы