繁体   English   中英

如何比较数组元素?

[英]How to compare array element?

假设我有一个array ,其中elements "am","john","rosa","freedom" 我想compare这些元素,结果将是wordsize of the longest wordsize of the longest word 我正在使用objective C

没有“内置”方法,但是可以使用NSArraysortedArrayUsingSelector:并在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: 以升序对字符串进行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];

听起来像是经典的逻辑练习,还是我想念您的问题?

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

我将为上述两种方法添加另一种方法-使用一个块来执行迭代的主体。

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

编辑:最大值和索引必须为__block存储类型,以便可以从块内部进行更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM