数组 - 查找对象连续重复的次数

时间:2013-04-30 20:40:36

标签: objective-c arrays algorithm sorting

我的数组对象如下:

10,10,10
20,23,14
10,10,10
10,10,10
10,10,10
32,23,42
32,23,42
10,10,10
32,23,23
32,23,23

如何通过这个数组找出相同的对象按顺序重复多少次,然后添加一个,以及它重复的次数?

然后使用以下对象保存新数组:

10,10,10,1
20,23,14,1
10,10,10,3
32,23,42,2
10,10,10,1
32,23,23,2

任何帮助将不胜感激。

谢谢!

4 个答案:

答案 0 :(得分:0)

将每三个整数分解为自己的数组(确保它们是字符串)。

然后遍历这些数组中的每一个,并输入到NSMutableDictionary,键是字符串(您的数字),值是一个计数器(如果看到一次,加1等等)

保持指向最高键的指针(如果newCount> highestCountPointer,则highCountPointer = newCount)

在该迭代结束时,将highestCountPoints的数字添加到数组的末尾。

答案 1 :(得分:0)

试试这个:

NSMutableArray *outArray = [[NSMutableArray alloc] init];
for (NSUInteger j = 0; j < [theArray count]; j++) {
    id object = [theArray objectAtIndex:j];
    NSUInteger repeats = 1;
    while (j + 1 < [theArray count] && [[theArray objectAtIndex:j + 1] isEqual:object]) {
        j++;
        repeats++;
    }
    [outArray addObject:object];
    [outArray addObject:[NSNumber numberWithUnsignedInteger:repeats]];
}
return outArray;

如果输入数组是可变的,也可以这样做。我把它作为读者的练习。

答案 2 :(得分:0)

我不是Objective C程序员,所以请原谅任何语言失误。像下面这样的东西应该做的工作:

NSMutableArray *result = [[NSMutableArray alloc] init];
id pending = nil;
NSUInteger count = 0;
for (NSUInteger i = 0; i < [theArray count]; i++) {
    id object = [theArray objectAtIndex:i];
    if ([object isEqual:pending]) {
        count++;
    } else {
        if (pending != nil) {
            [result addObject:[NSString stringWithFormat:@"%@,%d", pending, count]];
        }
        pending = object;
        count = 1;
    }
}
if (pending != nil) {
    [result addObject:[NSString stringWithFormat:@"%@,%d", pending, count]];
}

答案 3 :(得分:0)

从命令行运行“uniq -c”:)