Iphone NSCountedSet-获取集合中项目的计数

Iphone NSCountedSet-获取集合中项目的计数,iphone,objective-c,ios,ipad,nsset,Iphone,Objective C,Ios,Ipad,Nsset,我有一个信息数组,其中包含多个我想要匹配和计数的名称,然后移动到一个表视图,就像你在messages应用程序上看到的那样 我已达到这一点。在这里,我可以登录并查看我想要的内容,但无法找到任何解决方案,将该信息从集合中提取并相应地放入表视图中 范例 - (void)directMessagesReceived:(NSArray *)messages forRequest:(NSString *)connectionIdentifier{ for(NSDictionary *d in me

我有一个信息数组,其中包含多个我想要匹配和计数的名称,然后移动到一个表视图,就像你在messages应用程序上看到的那样

我已达到这一点。在这里,我可以登录并查看我想要的内容,但无法找到任何解决方案,将该信息从集合中提取并相应地放入表视图中

范例

- (void)directMessagesReceived:(NSArray *)messages forRequest:(NSString    
*)connectionIdentifier{

for(NSDictionary *d in messages) {

  // NSLog(@"See Direct Messageges Parsing Info: %@", d);

    Tweet *tweetDic = [[Tweet alloc] initWithTweetDictionary:d];


    //[directMessages addObject:tweetDic];
    [tweetDic autorelease];



}

//[arayToScan addObject:[messages valueForKey:@"sender_screen_name"]];
[arayToScan addObjectsFromArray:messages];
[self checkForDuplicateIDs]; 
// NSLog(@"Same ScreenName Received: %@", arayToScan);

//[self.mainTableView reloadData];    
 NSLog(@"DM COUNT = %i",[directMessages count]);

[DSBezelActivityView removeViewAnimated:YES];


}



- (NSSet *)checkForDuplicateIDs {

//CHECK FOR DUPLICATES IN ARRAY
NSArray *allIDs = [arayToScan valueForKeyPath:@"sender_screen_name"];
NSArray *sortedIDs = [allIDs sortedArrayUsingSelector:@selector(compare:)];

NSString *previousID = nil;
duplicateIDs = [NSMutableSet set];
for (NSString *anID in sortedIDs) {
    if ([previousID isEqualToString:anID]) {
        [duplicateIDs addObject:anID];

    }
    previousID = anID;
}


//THEN REMOVE ANY DUPLICATES IN NEW ARRAY
NSCountedSet *countedSet = [NSCountedSet setWithArray:sortedIDs];
NSMutableArray *oneMess = [NSMutableArray arrayWithCapacity:[sortedIDs count]];
NSMutableArray *multipleMess = [NSMutableArray arrayWithCapacity:[sortedIDs count]];


for(id obj in countedSet) {
    if([countedSet countForObject:obj] == 1) {
        [oneMess addObject:obj];
    }
 for(id duplicatenames in countedSet) {
     if ([countedSet countForObject:duplicatenames]>1) {
         [multipleMess addObject:duplicatenames];
         [countedSet  countForObject:duplicatenames];

     }


}


}
//NSLog(@"NSCountedSet = %@",[countedSet allObjects]);
 //NSLog(@"NSCountedSet = %@",countedSet);
//NSLog(@"One Message = %@",oneMess);
// NSLog(@"Multiple Messages = %@",multipleMess);


//HERE I HAVE ORIGINAL ARRAY IN ALBETICAL ORDER
// NSLog(@"Messages Containing more then 1 = %@",sortedIDs);    

//HERE I HAVE DUPLICATES IN ALBETICAL ORDER
// NSLog(@"Messages Containing more then 1 = %@",duplicateIDs);

//HERE I HAVE THE MESSAGES ONLY CONTAING 1
//NSLog(@"Messages Containing only 1 = %@",oneMess);


//NOW I WANT TO COUNT THE DUPLICATES TO PLACE AS A STRING IN CELL FOR # OF MESSAGES & #   
OF ROW IN TBLVIEW
//NSLog(@"Duplicates count = %i",[duplicateIDs count]);
// NSLog(@"Messages Containing only count = %i",[oneMess count]);

//HERE I WOULD ADD BOTH ARRAYS AND SEND TO MY ARRAY BELOW WHICH IS USED FOR MY TBLVIEW
THIS INFO IS RETRIEVABLE WHAT I NEED IS THE # OF EACH DUPLICATE AS SEEN 

//ARRAY *NEWARRAY INIT WITH OBJECTS ,ONEMESS, MULTIPLEMESS,
//ARRAY CUSTOM # OF EACH MULTIPLE MESSAGE TO SHOW IN TBLVIEW???

 //THEN I CAN CONTINUE WITH THE BELOW METHOD TO RELOD THE TABLEVIEW
//[directMessages addObject:NEWARRAY];
//[self.mainTableView reloadData];


return [[duplicateIDs copy] autorelease];

}
这是日志。。。这种情况发生的次数和它计数的次数一样多,但我只是将其记录下来,看看它是否正常工作。任何帮助都将不胜感激

Counted = <NSCountedSet: 0x6d8cb80> (Nkapoor124 [33], iphonetechtips [3], jima6636 [4], pro1995 [2], iphone266 [2], eenofonn [1], iphoneMaster323 [3], FreeAppl3 [2], Bababooey13 [7], _CL1CK_ [5], _ToyVan_ [4], Nucleiosis [26], dracossaint [6], AlexInHouston [1], FlybriTn [7], iOSGraphix [1], deckedsg [5], 19est80 [3], JHackstar [2], barsoverbeats [7], anonomys209 [5], 87whitestallion [1], bAdGigabit [55], Sgt_Impacto [3], Nazaroth [2], K_Nitsua [1], MannyIphone [6], iphoneman76 [3])
Counted=(Nkapoor124[33]、iphonetechtips[3]、jima6636[4]、pro1995[2]、iphone266[2]、eenofon[1]、iphoneMaster323[3]、FreeAppl3[2]、Bababooey13[7]、_CL1CK[5]、_ToyVan[4]、nucleosis[26]、dracossaint[6]、alexhinhouston[1]、FlybriTn[7]、iographix[1]、deckedsg[5]、1980[3]、JHackstar[2]、barsoverbeats[7]、anom209[5],87WhiteTallion[1],bAdGigabit[55],Stg_Impacto[3],Nazaroth[2],K_Nitsua[1],MannyIphone[6],iphoneman76[3])

在您的澄清中,您要求提供每份副本的数量。你可以在下面的计数。如果您要查找每个重复的次数(而不是每个的总计数),则每个重复的次数为计数-1。如果count-1为0,则不存在重复项

我想您正在寻找NSCountedSet countForObject方法

下面的示例

    NSArray *names = [NSArray arrayWithObjects:@"John", @"Jane", @"John", nil];
    NSCountedSet *set = [[NSCountedSet alloc] initWithArray:names];

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

2011-09-30 01:00:50.665 Craplet[7854:707] Name=Jane, Count=1
2011-09-30 01:00:50.679 Craplet[7854:707] Name=John, Count=2

为什么要在oneMess中添加一个计数的项目?是否只想在tableView中显示计数为1的项目?另外,您知道表委托回调是如何工作的吗?这是你的问题吗?我用更多的信息编辑了这篇文章。。。。将对象放置到TableView中不是问题。这个信息被解析,我从解析的信息“sender\u screen\u name”中提取一个字符串,查找是否有重复的信息,并将多条消息与单个消息分开。我可以检索它们的计数,用以计算有多少个单元格,我甚至可以将所有这些名称正确地放置在我的单元格中,但我想要的是每个重复名称的数量。。。如日志所示!谢谢你的回复,我希望有人能在这个问题上启发我-我想我明白了。现在就尝试一下/很酷-这也是一条建议。努力把问题浓缩到本质上来。为了弄清问题的症结,有很多东西需要通读。例如,标题可能是“获取NSCountedSet项的计数”。表视图点是干扰因素等。。。可以用一个简单的循环来演示。换句话说,花时间在这个问题上,你会得到更好的答案。希望有帮助:)@bryanmac NSCountedSet不会被订购。用countForObject获得有序集还有其他方法吗?