Emp*_*ump 13 arrays objective-c count
我需要执行我认为的基本功能,但我找不到任何关于如何操作的文档.请帮忙!
我需要计算某个对象在数组中出现的次数.见例子:
array = NSArray arrayWithObjects:@"Apple", @"Banana", @"Cantaloupe", @"Apple", @"DragonFruit", @"Eggplant", @"Apple", @"Apple", @"Guava",nil]retain];
Run Code Online (Sandbox Code Playgroud)
如何迭代数组并计算它找到字符串@"Apple"的次数?
任何帮助表示赞赏!
Mar*_*aev 19
还有一个解决方案,使用块(工作示例):
NSInteger occurrences = [[array indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop) {return [obj isEqual:@"Apple"];}] count];
NSLog(@"%d",occurrences);
Run Code Online (Sandbox Code Playgroud)
zap*_*aph 17
正如@bbum所说,使用NSCounted集.有一个初始化器,它会将一个数组直接转换为一个计数集:
NSArray *array = [[NSArray alloc] initWithObjects:@"A", @"B", @"X", @"B", @"C", @"D", @"B", @"E", @"M", @"X", nil];
NSCountedSet *countedSet = [[NSCountedSet alloc] initWithArray:array];
NSLog(@"%@", countedSet);
Run Code Online (Sandbox Code Playgroud)
NSLog输出:(D [1],M [1],E [1],A [1],B [3],X [2],C [1])
只需访问项目:
count = [countedSet countForObject: anObj]; ...
Run Code Online (Sandbox Code Playgroud)
nac*_*o4d 15
一个简单而具体的答案:
int occurrences = 0;
for(NSString *string in array){
occurrences += ([string isEqualToString:@"Apple"]?1:0); //certain object is @"Apple"
}
NSLog(@"number of occurences %d", occurrences);
Run Code Online (Sandbox Code Playgroud)
PS:Martin Babacaev的答案也很好.块的迭代速度更快,但在这种特殊情况下,元素很少,我猜没有明显的增益.我会用那个虽然:)
bbu*_*bum 15
用一个NSCountedSet; 它比字典更快,旨在解决这个问题.
NSCountedSet *cs = [NSCountedSet new];
for(id anObj in someArray)
[cs addObject: anObj];
// then, you can access counts like this:
.... count = [cs countForObject: anObj]; ...
[cs release];
Run Code Online (Sandbox Code Playgroud)
刚刚遇到这个相当古老的问题.我建议使用NSCountedSet:
NSCountedSet *countedSet = [[NSCountedSet alloc] initWithArray:array];
NSLog(@"Occurrences of Apple: %u", [countedSet countForObject:@"Apple"]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17496 次 |
| 最近记录: |