计算每个值在数组中重复的次数

时间:2013-06-04 13:27:16

标签: iphone ios6

如何检查数组中重复的时间项数。我有一个包含重复项的数组。下面是数组。

"Family:0",
"Family:0",
"Family:0",
"Gold:3",
"Gold:3"

所以,我希望各个项目的响应值为3和2。我怎样才能做到这一点。希望我明白我的观点。如果有任何不清楚的地方请询问。

以下是我尝试的代码。

int occurrences = 0;
int i=0;
for(NSString *string in arrTotRows){
    occurrences += ([string isEqualToString:[arrTotRows objectAtIndex:indexPath.section]]); //certain object is @"Apple"
    i++;
}

4 个答案:

答案 0 :(得分:7)

NSCountedSet *countedSet = [[NSCountedSet alloc] initWithArray:yourArray];

获取出现次数:

int objectCount = [countedSet countForObject:yourQuery];

(其中yourQuery是您想要获得多重性的对象)。在您的情况下,例如:

int objectCount = [countedSet countForObject:@"Family:0"];

objectCount应该等于3,因为“族:0”在多集中是三次。

答案 1 :(得分:2)

您可以使用NSCountedSet。将所有对象添加到计数集中,然后使用countForObject:方法查找每个对象出现的频率。

实施例

NSArray *names = [NSArray arrayWithObjects:@"Family:0", @"Family:0", @"Gold:3", @"Gold:3", nil];
    NSCountedSet *set = [[NSCountedSet alloc] initWithArray:names];

    for (id item in set)
    {
        NSLog(@"Name=%@, Count=%lu", item, (unsigned long)[set countForObject:item]);
    }

<强>输出

Name=Gold:3, Count=2

Name=Family:0, Count=2

答案 2 :(得分:0)

NSCountedSet解决了这个问题。使用addObject:添加所有字符串,然后在枚举集合时使用countForObject:获取最终计数。

答案 3 :(得分:0)

请试试这个......

int count = 0;

for (int i = 0; i < array.count; ++i) {
    NSString *string = [array objectAtIndex:i];
    for (int j = i+1; j < array.count; ++j) {
        if ([string isEqualToString:[array objectAtIndex:j]]) {
         count++;
        }
    }