Сортировка массива объектов двумя criterias?

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

Student
{
    double grade;
    string name;
    ...
} 

Как я могу отсортировать объекты сначала по классу и затем по имени? так, например, если у меня есть список: Tom 9.9 Andrew 9.8 Chriestie 10 Mat 9.8 Allison 10 Ada 9.8

После вида я должен иметь: Allison 10 Christie 10 Tom 9.9 Ada 9.8 Andrew 9.8 Mat 9.8

И не Christie 10 Allison 10 Tom 9.9 Andrew 9.8 Ada 9.8 Mat 9.8

любой указатель действительно полезен.

11
задан Sorin Antohi 15 January 2010 в 13:19
поделиться

2 ответа

Использование JDBC невозможно, так как он не поддерживает. Обойти можно, включив iBatis iBATIS является рамка сохранения и вызвать конструктор Scriptrunner , как показано в документации iBatis .

Нехорошо включать тяжелую рамку устойчивости, такую как ibatis, чтобы запускать простые sql-скрипты любыми способами, которые можно сделать с помощью командной строки

$ mysql -u root -p db_name < test.sql
-121--1281094-

Я не знаю, какую платформу или язык вы используете - Но на платформе .Net есть проект Microsoft Research под названием Chess , который выглядит очень многообещающим, чтобы помочь тем из нас, кто делает многопоточные компоненты, в том числе без блокировки.

Я не использовал его огромное количество, ум.

Это работает (грубое объяснение) путем явного перемежения потоков максимально жесткими способами, чтобы фактически вытеснить ваши ошибки в дикую природу. Он также анализирует код, чтобы найти общие ошибки и плохие узоры - аналогично анализу кода.

В прошлом я также создал специальные версии рассматриваемого кода (через # if blocks и т.д.), которые добавляют дополнительную информацию отслеживания состояния; счетчики, версии и т.д., в которые я могу затем погружаться в рамках единичного теста.

Проблема в том, что для написания кода требуется гораздо больше времени, и вы не всегда можете добавить такие вещи без изменения базовой структуры кода, который уже есть.

-121--1529886-

Я довольно блеск на моих объективных знаниях, но есть несколько хороших указателей здесь и всегда есть документация . Вот моя трещина...

NSSortDescriptor *gradeSorter = [[NSSortDescriptor alloc] initWithKey:@"grade" ascending:YES];
NSSortDescriptor *nameSorter = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];

[personList sortUsingDescriptors:[NSArray arrayWithObjects:gradeSorter, nameSorter, nil]];
23
ответ дан 3 December 2019 в 03:52
поделиться

Вам необходимо реализовать собственный компаратор и использовать один из методов сортировки NSArray (например, sortedArrayUsingSelector: )

-(NSComparisonResult)compare:(Student *)student {
  // sort by name
  int nameComp = [name compare:student.name];
  if (nameComp != NSOrderedSame) return nameComp;

  // reverse ordered as desired in the question
  if (grade > student.grade)
    return NSOrderedAscending;
  else if (grade == student.grade) // watchout here
    return NSOrderedSame;
  else
    return NSOrderedDescending;
}

NSArray *unsrtedArray = ...
NSArray *sortedArray = [unsortedArray sortedArrayUsingSelector:@selector(compare:)];
3
ответ дан 3 December 2019 в 03:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: