开发者

How to compare array element?

开发者 https://www.devze.com 2023-01-14 01:53 出处:网络
Suppose I have an array having elements \"am\",\"john\",\"rosa\",\"freedom\". I want to compare these elements and result would be the wo开发者_开发百科rd and the size of the longest word. I am using

Suppose I have an array having elements "am","john","rosa","freedom". I want to compare these elements and result would be the wo开发者_开发百科rd and the size of the longest word. I am using objective C.


There isn't a "built-in" way of doing this, however you can use NSArray's sortedArrayUsingSelector: and create a category on NSString to provide a lengthCompare: method.

// 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

Now you can sort an of strings in ascending order using 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];


Sounds like a classical logic exercise or is it something I miss in your question ?

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);


I'll add one more approach to the two above -- use a block to do the body of your iteration.

__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: The max and index have to be of storage type __block so they can be changed from inside the block.

0

精彩评论

暂无评论...
验证码 换一张
取 消