-1

我的数组对象如下:

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

我怎样才能通过这个数组并找出同一个对象按顺序重复多少次,然后添加 a ,以及它重复的次数?

然后保存一个新数组,其中包含以下对象:

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

4 回答 4

0

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

于 2013-04-30T21:07:18.137 回答
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;

如果输入数组是可变的,这也可以就地完成。我把它留给读者作为练习。

于 2013-04-30T20:49:51.987 回答
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]];
}
于 2013-04-30T20:50:38.707 回答
0

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

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

保持一个指向最高键的指针(如果 newCount >highestCountPointer,那么highestCountPointer=newCount)

在该迭代结束时,将最高计数点添加到数组末尾的数字。

于 2013-04-30T20:49:23.733 回答