[Xcode]如何根据类型统计NSArray

Posted

技术标签:

【中文标题】[Xcode]如何根据类型统计NSArray【英文标题】:[Xcode]How to count NSArray according to type 【发布时间】:2012-03-03 23:37:56 【问题描述】:

我想问我如何计算数组中的对象类型。例如

这是我的数据类

+ (id)LocationWithID:(NSString *)UniqueID name:(NSString *)name address:(NSString *)address latitude:(float )latitude longitude:(float )longitude locationtype:(NSString *)locationtype country:(NSString *)country distance:(float )distance;

这是我的数组

[array addObject:[dataclass LocationWithID:UniqueID name:name address:address latitude:latitude longitude:longitude locationtype:locationtype country:country distance:distance]];

我想计算这个对象中有多少个国家。通常我们使用 [数组计数]; 但这将计算数组中的所有对象。现在在我的情况下,我想计算非重复对象,例如我得到一个包含 3 个英国、5 个美国、7 个日本、3 个中国的数组,我想要的结果是国家类型 = 4。

我想根据国家类型为表格视图创建几个部分。有人吗?

【问题讨论】:

【参考方案1】:

您可以使用字典将具有相同国家/地区的对象放在单独的数组中:

NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
for (dataclass *location in array) 
    if (![dictionary objectForKey:location.country]) 
        [dictionary setObject:[NSMutableArray array] forKey:location.country];
    
    [(NSMutableArray *)[dictionary objectForKey:location.country] addObject:location];

现在,您不仅可以像这样获得不同国家的数量:

int countriesCount = [dictionary count];

而且,使用相应国家/地区的位置填充表格视图的每个部分也很容易。

您可以检索名称为 countryName 的特定国家/地区的所有位置,如下所示:

NSArray *locationsForCountry = [dictionary objectForKey:countryName];

您还可以像这样拥有所有国家/地区的列表:

NSArray *countries = [[dictionary keyEnumerator] allObjects];

【讨论】:

我在插入字典代码警告时收到此警告:语义问题:集合表达式类型 'dataclass *' 可能无法响应 'countByEnumeratingWithState:objects:count:'ScreenShot。 什么是agileLocation?是一堂课吗?为什么不用dataClass 我再次重新输入了代码,警告消失了。我现在就试一试。谢谢【参考方案2】:

枚举数组中的每个项目,并为每个项目获取国家并将其添加到 NSMutableSet。枚举之后,集合的大小就是唯一国家的个数。

如果您正在创建一个表格并且您只是希望该表格为每个国家/地区提供一个部分,那么可能有更好的方法来执行此操作,但我不知道。我猜这类似于将表中的适当属性绑定到数组控制器或数组控制器元素上的正确值。

【讨论】:

【参考方案3】:

NSArray 本身没有此功能,因此,正如其他人所指出的,为每个国家/地区保留单独的计数是最简单的。最好的方法是创建一个 NSCountedSet 对象,并在将数据对象添加到数组时添加国家/地区。

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSCountedSet_Class/Reference/Reference.html

要获取任何国家/地区的计数,您只需调用 [set countForObject:country]。简单!

【讨论】:

只有当你的对象实现了正确测试相等性的方法时才简单。 请注意,country 参数是一个 NSString。 :) 啊,我的错 - 我必须做很多滚动才能看到它。也许一些新的线条和冒号对齐会救我红脸。

以上是关于[Xcode]如何根据类型统计NSArray的主要内容,如果未能解决你的问题,请参考以下文章

试图根据约定命名委托方法,Xcode“期待一个类型”

复合数据类型,英文词频统计

如何在 Xcode 5 中制作隐形按钮?

关于spss: 如何统计两组数据有无差异

ArcGIS风暴根据海拔(坡度)范围分级统计土地覆盖的类型和面积(兰州市GlobeLand30m数据为例)

如何根据 C“字符串”的长度闯入 Xcode 的调试器?