2013-02-28 2 views
4

У меня есть массив NSDates, и я бы хотел захватить крупнейший NSDate из массива. Хотя я всегда мог сортировать их и захватывать первый/последний, есть ли способ сделать это с помощью KeyValueCoding или какого-нибудь другого быстрого однолинейного способа? Я знаю, что я мог бы использовать что-то вроде valueForKeyPath @ "@ max.date", если у объектов было свойство date, но что, если объекты сами являются датами?Получение Max Date от NSArray, KVC

спасибо

+1

Я думаю, я могу просто использовать это [dateArray sortUsingSelector: @selector (compare :)); –

+0

Если вам действительно нужен одноразовый подход с KVC, подкласс NSMutableArray и [написать операторы самостоятельно] (http://bou.io/KVCCustomOperators.html). – CodaFi

+0

Вы были на правильном пути, за исключением одной вещи, которую вы пропустили. Вместо '@" @ max.date "', вы должны были попробовать с '@ @ @ max.self''. Я проверил его сам, и он отлично работает для меня. – iDev

ответ

12

Вы можете использовать,

NSDate *maxDate = [dateArray valueForKeyPath:@"@max.self"]; 

Это даст вам самый большой срок из массива. Перед этим вам не нужно сортировать массив.

С documentation,

Оператор @Max сравнивает значение свойства, указанное ключ пути справа от оператора и возвращает максимальное значение найдены. Максимальное значение определяется с помощью метода compare: объектов по указанному пути ключа. Объекты сравниваемых свойств должны поддерживать сравнение друг с другом. Если значение правой стороны пути ключа равно нулю, оно игнорируется.

Обратите внимание, что @max сделает compare:, а затем выяснит максимальное значение.

+1

именно то, что я искал. Не знал, что вы можете использовать себя там. TYhanks! –

2

Согласен с @SeanDanzeiser. Чтобы быть более конкретным, вот ~ 70 байт один вкладыш:

// if dateArray is the array of dates ... 
NSDate *maxDate = [[dateArray sortedArrayUsingSelector:@selector(compare:)] lastObject]; 
+0

Это отлично работает, если вы хотите сравнить какое-либо свойство, но для фактического элемента с наивысшим (или самым низким) значением вместо значения. Еще лучше использовать 'sortedArrayUsingComparator:', и вы можете предоставить свой собственный встроенный компаратор. Благодаря! – mkko

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