Предположим, у меня есть array
с elements
"am","john","rosa","freedom"
. Я хочу, чтобы compare
эти элементы и результат были бы word
и size of the longest word
. Я использую objective C
.Как сравнить элемент массива?
ответ
Существует не «встроенный» способ сделать это, но вы можете использовать NSArray
«ы sortedArrayUsingSelector:
и создать категорию на NSString
, чтобы обеспечить способ lengthCompare:
.
// NSString+LengthCompare.h
#import NSString.h
@interface NSString (LengthComparison)
- (NSComparisonResult)lengthCompare:(NSString *)aString;
@end
// NSString+LengthCompare.m
#import NSString+LengthCompare.h
@implememtation NSString (LengthComparison)
- (NSComparisonResult)lengthCompare:(NSString *)aString
{
if ([self length] < [aString length]) {
return NSOrderedAscending;
} else if ([self length] > [aString length]) {
return NSOrderedDescending;
} else {
return NSOrderedSame;
}
}
@end
Теперь вы можете сортировать строки в порядке возрастания с помощью lengthCompare:
NSArray *array = [NSArray arrayWithObjects: @"am", @"john", @"rosa", @"freedom", nil];
NSArray *arraySortedByStringLength = [array sortedArrayUsingSelector:@selector(lengthCompare:)];
NString *shortestWord = [[arraySortedByStringLength objectAtIndex:0] retain];
NSLog(@"shortest word, %@ has length %d", shortestWord, [shortestWord length];
[shortestWord release];
NString *longestWord = [[arraySortedByStringLength lastObject] retain];
NSLog(@"Longest word, %@ has length %d", longestWord, [longestWord length];
[longestWord release];
Если вы собираетесь сделать это один раз, вы также можете использовать - [NSArray sortedArrayUsingComparator:], который использует блок вместо селектора. Тогда вам не нужно объявлять метод, который вызывается только один раз. –
Хорошая альтернатива, однако блоки ограничены iOS4 и выше. – falconcreek
бирка - [iphone]. на Mac были введены блоки в 10.6 (Snow Leopard) – falconcreek
Звучит как классическое упражнение по логике или это что-то мне не хватает в вашем вопросе?
int longestWordIndex = 0;
NSUInteger longestWordSize = 0;
for (int i=0 ; i<[nameArray count] ; i++) {
NSString* element = (NSString*)[nameArray objectAtindex:i];
if([element lenght] > longestWordSize) {
longestWordSize = [element lenght];
longestWordIndex = i;
}
}
NSLog("Longest word is %@ with size of :%d", [nameArray objectAtIndex:longestWordIndex], longestWordSize);
well thanx, я знаю это решение. Но это решение для простых людей. Если вы можете сказать мне какие-либо встроенные методы, которые доступны в objecive C. – user12345
Да, я так и думал. Вероятно, вы могли бы испортить indexesOfObjectsPassingTest, но вам все равно придется звонить ему дважды. Никакая другая идея – VdesmedT
я добавлю еще один подход к двум выше - использовать блок, чтобы сделать тело вашего итерация.
__block NSUInteger longestWordSize = -1; // Make sure at least one object will be longer.
__block NSUInteger longestWordIndex;
[nameArray enumerateObjectsUsingBlock:^(id currentWord, NSUInteger index, BOOL *stop) {
if ([currentWord length] > longestWordSize) {
longestWordSize = [currentWord length];
longestWordIndex = index;
}
}];
NSLog("Longest word is %@ with size of :%d", [nameArray objectAtIndex:longestWordIndex], longestWordSize);
Edit: Макс и индекс должен иметь тип __block
хранения, так что они могут быть изменены внутри блока.
- 1. Как сравнить элемент массива с элементом другого массива в ArrayList?
- 2. Как сравнить два массива?
- 3. как сравнить элементы массива
- 4. Java - Сравнить элемент массива String со строкой
- 5. Как сравнить два двухмерных массива?
- 6. Как сравнить 2 массива?
- 7. Как сравнить два массива?
- 8. Как сравнить элементы массива
- 9. как сравнить два массива
- 10. Как сравнить элементы массива
- 11. Как сравнить два массива строки?
- 12. Как сравнить диагонально противоположный элемент многомерного массива с NumPy
- 13. Как сравнить каждый элемент массива друг с другом?
- 14. сравнить элемент в двух массивах
- 15. Как сравнить draggable-элемент jQuery?
- 16. Как сравнить элемент из двух массивов
- 17. Как сравнить два массива объектов?
- 18. Как сравнить два массива объектов
- 19. Как сравнить эти два массива?
- 20. Как сравнить два значения массива?
- 21. PHP: Как сравнить 2 массива?
- 22. Как сравнить значения массива даты
- 23. Как сравнить значение внутри массива
- 24. Как сравнить 2 массива символов
- 25. Сравнить два массива с позицией
- 26. Javascript, сравнить элемент из массива, если true выполнить функцию
- 27. Сравнить элемент массива со строкой внутри Linq запроса
- 28. Как сравнить различные элементы массива в Perl?
- 29. Как сравнить конкретные элементы массива в java
- 30. angularjs сравнить два массива
возможно дубликат? http://stackoverflow.com/questions/1137839/comparing-arrays-in-objective-c – Adnan
Не могли бы вы уточнить: какой массив (массив стилей C или NSArray)? Rem: сравнение двух элементов всегда возвращает одно значение (NSOrderDescending, NSOrderAscending или NSOrderedSame). – VdesmedT
Являются экземплярами 'элементов'' NSString' или какого-то другого класса? – falconcreek