NSCountedSet - get count of items in set
Asked Answered
A

1

7

I have a array of info that has multiple Names that I want to match and count then move to a table view such as you would see on a messages app.

I have reached to this point. Where I can log and see what I want but simply can not find any solution pulling that info from the set and placing into a tableview accordingly.

example

- (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];

}

This is the log... this happens as many times as it counts but I just logged it to see if it was working which its is. Any help would be greatly appreciated

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])
Amandy answered 30/9, 2011 at 3:2 Comment(3)
Why are you adding items with one count to oneMess? Do you just want to show items only have a count of 1 to the tableView? Also, do you know how table delegate callbacks work? Is that your question?Yurt
I edited the post with more info.... placing object into tableviews is not an issue. This information is parsed I grab one string from the parsed info "sender_screen_name" find if theres duplicates and separate the multiple messages from the single messages. i can retrieve their count to use for how many cells I can even get all those names placed in my cells correctly but I want is the Amount of each duplicate name... as shown in the log! Thanks for the reply I hope someone can enlighten me on thisAmandy
OK - I think I got it. Trying something now/Yurt
Y
29

In your clarification, you asked for the amount (number?) of each duplicate. You can get at the count below. If you're looking for the number of times each is duplicated (instead of total count of each) then that's count - 1 for each. If it's count - 1 is 0, there's no duplicates.

I think you're looking for NSCountedSet countForObject method.

The sample below ...

    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]);
    }

Will output:

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
Yurt answered 30/9, 2011 at 5:2 Comment(2)
Cool - also one piece of advice. Work on boiling down the question to it's essence. There was a lot to read through to get at the crux of the question. For example, the title could have been "Getting count of NSCountedSet items". The table view points were distractors etc... and could have been demonstrated with a simple loop. In other words, spend time on the question and you'll get better answers. Hope that helps :)Yurt
@Yurt NSCountedSet would not be ordered. Any other way to get an ordered set with countForObject?Converted

© 2022 - 2024 — McMap. All rights reserved.